使用Razor视图在asp.net mvc 3中使用预定义值创建DropDown

Ler*_*ica 1 c# razor asp.net-mvc-3

我正在形成一个局部视图.在其中我想使用3个值显示下拉列表,例如:

<td>
    @Html.DropDownList("Yes", "No", "Not Applicable")
</td>
Run Code Online (Sandbox Code Playgroud)

显然我不能硬编码这样的值,但这是个主意.我将仅在此视图中使用此下拉列表,因此我想在可能的情况下保留逻辑,唯一的是我想跟踪所选值,因此我想添加一些隐藏值Id,例如.在我看来有没有办法做到这一点?我想过传递一个ViewBag参数或类似的东西,但我真的认为必须有一个更优雅的解决方案.

Ste*_*ger 5

ViewData["myList"] = 
                new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }
                .Select(x => new {value = x, text = x}), 
                "value", "text", "15");
Run Code Online (Sandbox Code Playgroud)

然后在你看来:

@Html.DropDownList("myList")
Run Code Online (Sandbox Code Playgroud)

或者您可以使用linq生成选择列表

IList<Customer> customers = repository.GetAll<Customer>();
IEnumerable<SelectListItem> selectList = 
    from c in customers
    select new SelectListItem
    {
        Selected = (c.CustomerID == invoice.CustomerID),
        Text = c.Name,
        Value = c.CustomerID.ToString()
    };
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

    List<SelectListItem> ls = new List<SelectListItem>();

    ls.Add(new SelectListItem() { Text = "Yes", Value = "true", Selected = true });
    ls.Add(new SelectListItem() { Text = "No", Value = "false", Selected = false });
    ls.Add(new SelectListItem() { Text = "Not Applicable", Value = "NULL", Selected = false });

    ViewData["myList"] = ls;
Run Code Online (Sandbox Code Playgroud)