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でした。モデルプロパティの名前を別の名前に変更すると、機能しました。ああ!
コントローラのTitle
プロパティの値を設定します。
ViewBag.TitleList = new SelectList(new string[] { "Mr", "Miss", "Ms", "Mrs" });
viewModel.Title = "Miss"; // Miss will be selected by default
もう1つの考えられる理由(および以下のコメントに基づく正しい理由)は、ViewData["Title"]
は別の値で上書きされます。 Title
プロパティの名前を他の名前に変更すると、すべてが機能するはずです。
値が指定されていない場合(つまり、「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");