使用静态项绑定Html.DropDownList

Muk*_*esh 15 asp.net-mvc html.dropdownlistfor asp.net-mvc-3

我必须Html.DropDownList静态绑定一个只有两个项目.

Text="Yes" Value="1"
Text="No"  Value="0"
Run Code Online (Sandbox Code Playgroud)

重要的是,我必须设置文本和值字段.

我怎样才能做到这一点?

小智 33

我用这个正常工作

        @Html.DropDownList("Status", new List<SelectListItem>

                 {
                    new SelectListItem{ Text="Active", Value = "1" },
                    new SelectListItem{ Text="Not-Active", Value = "0" }
                 }) 
Run Code Online (Sandbox Code Playgroud)

  • 我希望这个回复得到更多的赞成。尽管有些人可能声称将信息从视图模型传递到视图然后返回到控制器是最佳实践,但在某些情况下,您肯定不想经历所有这些麻烦。这种方法总体上的代码要少得多,所以似乎是一个更好的解决方案(更少的代码 = 更好) (2认同)

Sre*_*r P 25

最佳做法是不在视图中创建SelectList.您应该在控制器中创建它并使用ViewData传递它.

例:

var list = new SelectList(new [] 
{
    new { ID = "1", Name = "name1" },
    new { ID = "2", Name = "name2" },
    new { ID = "3", Name = "name3" },
}, 
"ID", "Name", 1);

ViewData["list"]=list;
return View();
Run Code Online (Sandbox Code Playgroud)

传递给constratctor:IEnumerable objec,值字段是文本字段和选定的值.

在视图中:

<%=Html.DropDownList("list",ViewData["list"] as SelectList) %>
Run Code Online (Sandbox Code Playgroud)


sar*_*esh 5

下面的代码假设您正在使用剃刀视图引擎,否则您将需要转换它.

@{
   var listItems = new List<ListItem>();
   listItems.Add(new ListItem{Text="Yes", Value="1"});
   listItems.Add(new ListItem{Text="No", Value="0"});
}

@Html.DropDownListFor(m=>m.SelectedValue, listItem);
Run Code Online (Sandbox Code Playgroud)

您应该考虑在代码中创建模型而不是视图.这也是编辑器模板的一个很好的候选者.