0

以下の設定では、すべての国籍がサーバーに戻されます。リスト全体は気にせず、選択した値だけを気にします。選択した国籍のみがモデルの残りの部分と共にポストバックされるようにコードを変更するにはどうすればよいですか?

モデル:

    // SearchCriteria model
public class SearchCriteria()
{
    public SearchCriteria()
    {
        Nationalities = new List<SelectListItem>();
        Nationalities.Add(new SelectListItem { Text = "Any Nationality", Value = "Any Nationality", Selected = true });
        Nationalities.Add(new SelectListItem { Text = "United States", Value = "United States", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Japanese", Value = "Japanese", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Mexican", Value = "Mexican", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Canadidan", Value = "Canadidan", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Chinese", Value = "Chinese", Selected = false });
    }
    public string Name {get;set;}
    public string Nationality { get; set; }
    public List<SelectListItem> Nationalities { get; set; }
}

コントローラ:

    [HttpPost]
    public ActionResult Find(SearchCriteria model)
    {                               
        try
        {
            // find it
            return View(model);
        }
        catch
        {
            return View(model);
        }
    }

意見:

@Html.Label("Name:");
@Html.TextBoxFor(model => model.Name);
@Html.Label("Nationality:");
@Html.DropDownListFor(model => model.Nationality, Model.Nationalities);
4

3 に答える 3

4

私はあなたの問題を見ていると思います。そして、それ自体は実際には問題ではありません。それはあなたの誤解です。

国籍のリストは、コントローラーにポストバックされません。これらは、オブジェクトが作成されるたびにコンストラクターによって作成されSearchCriteriaます (モデルがポストにバインドされる場合を含む)。これは、クライアントによってサーバーにポストされません。

これは常に必要とは限らない余分な作業ですが、実際には問題ではありません。実際に投稿された値は、オブジェクトの Nationality メンバーにある必要がありSearchCriteriaます。

Nationalities オブジェクトを毎回作成したくない場合は、これをヘルパー クラスに移動して、このデータを入力するときに呼び出すか、クラスから完全に移動してコントローラーで実行する必要があります。おそらく、このデータをデータベースに移動することをお勧めします。

ちなみに、最初の項目を削除して、代わりにデフォルトのテキストにすることもできます。これは、DropDownList/DropDownListFor オブジェクトのパラメーターです。

于 2013-07-21T17:19:33.580 に答える
2

NationalitiesSearchCriteriaインスタンスの作成時に入力されるだけです。Chrome の開発者コンソールまたは Firefox の firebug でサーバーに投稿されているものが表示される場合があります。

于 2013-07-21T17:18:55.103 に答える