2009-07-27 8 views
-2

私はMicrosoft ASP MVCフレームワークを勉強しています。ここに私のページの何か変なことがあります。コントロールはASP.netでリフレッシュされませんMVC

私はページに2つのドロップダウンリストを持っています。最初のフォームは、フォームをバックにポストし、パラメータをコントローラーに渡します。コントローラーは、2つ目のドロップダウンリストと2つのテキストボックスのような他のコントロールを更新します。私はビューデータにデータを渡します。そしてそれらをコントロールに割り当てました(SelectList to DropDownList、string to TextBox)。しかし、これらのコロールは、ポストの前と同じままです。どうすれば修正できますか?前もって感謝します!

よろしく

編集:

ありがとう!ここに私のコードは次のとおりです。

ビュー:

<script type="text/javascript" language="javascript"> 
    function Postback() { 
     var control = document.getElementById("Country"); 
     var parameter = document.getElementById("CountryName"); 

     parameter.value = control.value; 

     document.forms.item(0).submit(); 

    } 

</script> 

<%Html.BeginForm();%> 

    <fieldset> 
     <legend>Fields</legend> 
     <p style="height: 0px"> 
     <input type="hidden" id="CountryName" name="CountryName" value="" /> 
     </p> 
     <p> 
      <label for="Country">Country:</label> 
      <%=Html.DropDownList("Country", (SelectList)ViewData["Countries"]), new { onchange="Postback()" })%> 
     </p> 
     <p> 
      <label for="State">State:</label> 
      <%=Html.DropDownList("State", (SelectList)ViewData["States"])%> 
      </p> 
     <p> 
      <label for="Brief Intro">Introduction:</label> 
      <%= Html.TextBox("Intro", ViewData["Introduction"]) %> 
     </p> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<%Html.EndForm(); %> 

コントローラー:

public ActionResult Info() 
{ 
    ViewData["Countries"] = new SelectList(_db.Coutries.ToList(), "Id", "Name"); 
    return View(); 
} 

AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Info(int country) 
{ 
    ViewData["Countries"] = new SelectList(_db.Coutries.ToList(), "Id", "Name", country); 

    ViewData["States"] = new SelectList(_db.States.Where(s => s.countryid == country).ToList(), "Id", "Name"); 

    ViewData["Info"] = _db.CountryInfo.SingleOrDefault(info => info.countryid == country).Content; 

    return View(); 
} 

編集:その問題を解決する第二のコントローラにModelState.Clear()を呼び出します。ご提案ありがとうございました皆様ありがとうございます!本当にありがとう!

+0

あなたはあまり情報を提供していないようです。 –

+1

私たちの多くを助けるいくつかのコードを投稿してください。 –

+0

ビューとGETアクションとPOSTアクションの両方からコードを投稿してください。 –

答えて

1

強いタイプを使用IEnumerable<SelectListItem> - 私はそれがSelectListよりも優れていると信じています。これは(あなたがデバッガでint countryパラメータをチェックしましたか?)試してみてください。

AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Info(int country) 
{ 
    ViewData["Countries"] = _db.Countries.Select(x => new SelectListItem { 
     Text = x.Name, 
     Value = x.Id, // or countryId ? 
     Selected = x.Id == country 
    }).ToList(); 

    ViewData["States"] = _db.States.Where(s => s.countryid == country) 
     .Select(x => new SelectListItem { 
      Text = x.Name, 
      Value = x.Id 
     }).ToList(); 

    // Info? or Intro? (there is only Intro in View) 
    ViewData["Info"] = _db.CountryInfo.SingleOrDefault(info => info.countryid == country).Content; 

    return View(); 
} 

希望これは

+0

ありがとう!私は強く型付けされたIEnumerableを試してみます。 id部分として、私は正しいidを使用することを確信しています。また、IDと情報をページに印刷することもできます。唯一のdefultを設定することはできません。 コード: SelectList list =(SelectList)ViewData ["States"]; <%= list.SelectedValue%> 印刷されたIDは私が望むものです。 – Roy

0

はあなたがSelectListの(下のスニペットでは、コンストラクタの2番目のparam)にSelectedValueのを設定することができますか?

var items = new SelectList(new List<string> {"one", "two", "three"}, "two"); 
+0

確かに、私のコードからわかるように。ありがとう。 – Roy

関連する問題