【问题标题】:ASP.NET MVC: DropDownList -- Of DataSource, SelectedItem, and inline code access within the ViewASP.NET MVC:DropDownList——DataSource、SelectedItem 和视图内的内联代码访问
【发布时间】:2010-07-30 14:51:30
【问题描述】:

据我所知,有 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 字典和自动- 根据添加到调用 Controller 中的 ViewData 字典中的 SelectList 为 DropDownList 生成相应的标签。

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

对于我的生活,我不知道是否有办法使用&lt;asp:DropDownList&gt; 自动生成标签,或者我是否必须自己手动创建它们。

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

【问题讨论】:

  • 永远不应该在 MVC 中使用。
  • 想详细说明一下?不是我不相信你,而是我想知道为什么。

标签: asp.net-mvc drop-down-menu html-helper selectlist


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 2012-03-15
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    相关资源
    最近更新 更多