web-dev-qa-db-ja.com

mvc c#html.dropdownlistとviewbag

だから私は次の(疑似コード)を持っています:

string selectedvalud = "C";
List<SelectListItem> list= new List<SelectListItem>();
foreach(var item in mymodelinstance.Codes){
  list.Add(new SelectListItem { Text = item.Name, Value = item.Id.Tostring(), Selected = item.Id.ToString() == selectedvalue ? true : false });
}

ViewBag.ListOfCodes = list;

私の見解では:

<%: Html.DropDownList("Codes", (List<SelectListItem>)ViewBag.ListOfCodes , new { style = "max-width: 600px;" })%>

これで、ビューに到達する前に、「リスト」に項目が追加され、すでに選択されている項目にマークが付けられています。ただし、ビューに到達したとき、どのオプションも選択済みとしてマークされていません。

私の質問は、ビューバッグを使用してアイテムを渡すことは可能ですか、または別のメディアを使用する必要がありますか?それは私がそれをそのように使用するとオプションの選択されたフラグを削除するので。

9
gdubs

このようにしてみてください:

ViewBag.ListOfCodes = new SelectList(mymodelinstance.Codes, "Id", "Name");
ViewBag.Codes = "C";

そしてあなたの見解では:

<%= Html.DropDownList(
    "Codes", 
    (IEnumerable<SelectListItem>)ViewBag.ListOfCodes, 
    new { style = "max-width: 600px;" }
) %>

これが機能するには、次のように、コレクション内にId = "C"のアイテムが必要です。

    ViewBag.ListOfCodes = new SelectList(new[]
    {
        new { Id = "A", Name = "Code A" },
        new { Id = "B", Name = "Code B" },
        new { Id = "C", Name = "Code C" },
    }, "Id", "Name");
22
Darin Dimitrov