Ответ 1
Я думаю, это то, что вы ищете. Было бы лучше, если бы рефакторинг построил список в модель представления или в контроллере.
@Html.DropDownList("FooBarDropDown", new List<SelectListItem>
{
new SelectListItem{ Text="Option 1", Value = "1" },
new SelectListItem{ Text="Option 2", Value = "2" },
new SelectListItem{ Text="Option 3", Value = "3" },
}
Пример размещения этого в контроллере может выглядеть так:
public ActionResult ExampleView()
{
var list = new List<SelectListItem>
{
new SelectListItem{ Text="Option 1", Value = "1" },
new SelectListItem{ Text="Option 2", Value = "2" },
new SelectListItem{ Text="Option 3", Value = "3", Selected = true },
});
ViewData["foorBarList"] = list;
return View();
}
И тогда, по вашему мнению:
@Html.DropDownList("fooBarDropDown", ViewData["list"] as List<SelectListItem>)
Если это действительно статический список, который вам, возможно, придется использовать повторно в других представлениях/контроллерах, то я хотел бы рассмотреть возможность помещения этой логики в статический класс. Пример:
public static class DropDownListUtility
{
public static IEnumerable<SelectListItem> GetFooBarDropDown(object selectedValue)
{
return new List<SelectListItem>
{
new SelectListItem{ Text="Option 1", Value = "1", Selected = "1" == selectedValue.ToString()},
new SelectListItem{ Text="Option 2", Value = "2", Selected = "2" == selectedValue.ToString()},
new SelectListItem{ Text="Option 3", Value = "3", Selected = "3" == selectedValue.ToString()},
};
}
Что затем оставляет вам несколько разных способов доступа к списку.
Пример контроллера:
public ActionResult ExampleView()
{
var list = DropDownListUtility.GetFooBarDropDown("2"); //select second option by default;
ViewData["foorBarList"] = list;
return View();
}
Посмотреть пример:
@Html.DropDownList("fooBarDropDown", DropDownListUtility.GetFooBarDropDown("2"))