web-dev-qa-db-ja.com

MVCDropDownListの選択された値が機能しない

MVC5を使用しています。

リストのViewBagを次のように持っています

_ViewBag.TitleList = new SelectList((new string[] { "Mr", "Miss", "Ms", "Mrs" }), contact.Title);
//contact.Title has selected value.
_

次に、配列をSelectListItem ( to no avail)に変換してみました

ビューでは、次のようになります

_@Html.DropDownListFor(model => model.Title, ViewBag.TitleList as SelectList, "Select")
_

また、私は試しました

_@Html.DropDownList("Title", ViewBag.TitleList as SelectList, "Select")
_

リストは正常に読み込まれますが、_Selected Value is Not selected_です。この問題を修正する方法は?

更新原因は私のmodel.Titleと一致するViewBag.Titleでした。モデルプロパティの名前を別の名前に変更すると、機能しました。ああ!

8
Ruchan

コントローラのTitleプロパティの値を設定します。

ViewBag.TitleList = new SelectList(new string[] { "Mr", "Miss", "Ms", "Mrs" });
viewModel.Title = "Miss"; // Miss will be selected by default

もう1つの考えられる理由(および以下のコメントに基づく正しい理由)は、ViewData["Title"]は別の値で上書きされます。 Titleプロパティの名前を他の名前に変更すると、すべてが機能するはずです。

10
Zabavsky

値が指定されていない場合(つまり、「Id」)、DropDownListForが正しく動作しない場合があります。これを試して:

public class FooModel
{
    public int Id { get; set; }
    public string Text { get; set; }
}

var temp = new FooModel[] 
{
    new FooModel {Id = 1, Text = "Mr"}, new FooModel {Id = 2, Text = "Miss"},
    new FooModel {Id = 3, Text = "Ms"}, new FooModel {Id = 4, Text = "Mrs"}
                       };
ViewBag.TitleList = new SelectList(temp, "Id", "Text", 2);

編集:その他の解決策

var temp = new []
{
    new SelectListItem {Value = "Mr", Text = "Mr"}, new SelectListItem {Value = "Miss", Text = "Miss"},
    new SelectListItem {Value = "Ms", Text = "Ms"}, new SelectListItem {Value = "Mrs", Text = "Mrs"}
};
ViewBag.TitleList = new SelectList(temp, "Value", "Text", "Miss");
2
Jose M.