3

据我所知,有 3 种方法可以在 ASP.NET MVC 视图中创建 DropDownList:

  1. 手动编写 HTML 代码
  2. <asp:DropDownList ID="someID" runat="server"></asp:DropDownList>
  3. <%= Html.DropDownList("someID") %>

我想我们都同意#1(通常)是浪费时间。

使用#2,它似乎是“WebForms”的方式,但有一个优势,如果你正在编写一个视图,你可以通过它之后的内联代码访问你创建的对象。例如:

<asp:DropDownList ID="someID" runat="server"></asp:DropDownList>
<% 
   someID.SelectedIndex = 0;  
   string someString = someID.SelectedValue.ToString();
%>

#3似乎无法做到这一点。

我发现关于#3(HTML Helper 方式)的好处是,通过将字符串传递给它,它将名称和 ID 设置为字符串,并使用字符串搜索 ViewData 字典并自动生成基于添加到调用控制器中添加的 ViewData 字典的 SelectList 的 DropDownList 的相应标记。

// controller code
ViewData["someID"] = new SelectList(someMethod().ToList());  

对于我的生活,我无法弄清楚是否有一种方法可以自动生成标签,<asp:DropDownList>或者我是否必须自己手动创建它们。

在 ASP.NET MVC 中实现 DropDownList 的最佳方法通常是什么?

4

1 回答 1

1
<%= Html.DropDownList("name", new SelectList(someEnumerable, "valueProperty", "textProperty")) %>

其中 someEnumerable 是 viewModel 上的一个属性。

例如:

class Person
{
    int id;
    string name;
}

class myVM
{
    IEnumerable<Person> people;
}

<%= Html.DropDownList("name", new SelectList(Model.people, "id", "name")) %>

编辑不要在您的控制器中创建 SelectList,这是视图特定的代码并且属于视图,只需在视图模型中发送您的 IEnumerable。

于 2010-07-30T14:54:52.510 回答