11

この方法でMVC3のドロップダウンをバインドしようとしています。

モデル

public static Dictionary<string, string> SexPreference()
{
      var dict = new Dictionary<string, string>();
      dict.Add("Straight", "S");
      dict.Add("Gay", "G");
      dict.Add("Bisexual", "BISEX");
      dict.Add("Bicurious", "BICUR");
      return dict;
}

コントローラ

ViewBag.SexPreference = MemberHandler.SexPreference();

意見

@{
var itemsSexPreference = new SelectList(ViewBag.SexPreference, "Value", "Key", Model.sexpreference);
}

@Html.DropDownListFor(m => m.sexpreference, @itemsSexPreference)

ドロップダウンが選択した値を選択していません。理由はわかりません。

4

4 に答える 4

28

ViewBag.SexPreferenceモデルを持っているのになぜ設定するのですか?このViewBagを忘れてください。また、ドロップダウンリストを作成するには、2つのプロパティが必要です。選択した値を保持するスカラー型プロパティと、選択した値のリストを保持するコレクションプロパティです。現在、1つだけを使用していて、DropDownをコレクションプロパティにバインドしようとしているようですが、これは明らかに意味がありません。

ビューモデルを使用して、正しい方法で実行します。

public class MyViewModel
{
    public string SelectedSexPreference { get; set; }
    public Dictionary<string, string> SexPreferences { get; set; }
}

コントローラアクションに入力してビューに渡すこと:

public ActionResult SomeAction()
{
    var model = new MyViewModel();

    // Set the value that you want to be preselected
    model.SelectedSexPreference = "S";

    // bind the available values
    model.SexPreferences = MemberHandler.SexPreference();

    return View(model);
}

とあなたのビューの内側:

@model MyViewModel

@Html.DropDownListFor(
    m => m.SelectedSexPreference, 
    new SelectList(Model.SexPreferences, "Value", "Key")
)
于 2013-02-07T07:00:05.247 に答える