【问题标题】:What is wrong with my ASP.NET MVC SelectList?我的 ASP.NET MVC SelectList 有什么问题?
【发布时间】:2010-01-17 18:21:05
【问题描述】:

我正在尝试使用我的视图之一的 SelectList,但它只是没有正确填充。它获得了正确数量的条目 (4),但它们都显示为 System.Web.Mvc.SelectListItem。我在代码上启动了调试器,并看到一些奇怪的事情发生了。我一定做错了什么,但我不太明白是什么。

来自 ViewModel 的代码:

public SelectList DeviceTypes {get; private set;}
....
var device_types = DataTableHelpers.DeviceTypes(); 
IEnumerable<SelectListItem> sl = device_types.Select(
                      dt => new SelectListItem { Selected = (dt.DeviceType == 1),
                      Text = dt.Description, 
                      Value = dt.DeviceType.ToString() }).ToList();
DeviceTypes = new SelectList(sl);

以及来自视图的代码:

<%= Html.DropDownList("Type",Model.DeviceTypes) %>

所以,当我在调试器中查看它时,sl IEnumerable 正在正确构建。我可以在那里看到所有 4 个元素,以及正确的 Text 和 Value 属性值。然而,一旦我调用 SelectList 构造函数,如果我展开它包含的 IEnumerable,我会看到它有 4 个条目,但其中的所有数据都已丢失。 Text设置为System.Web.Mvc.SelectListItem,值为null

我尝试将ToList() 调用更改为ToArray(),并完全删除它。这并没有改变行为。

我在这里做错了什么?

【问题讨论】:

    标签: asp.net-mvc selectlist


    【解决方案1】:

    编辑:草草我的第一个答案。

    如果项目,您应该将 IEnumerable 列表传递给视图,而不是尝试在控制器中构造 Html 项目。

    控制器代码:

    public IEnumberable<YourModel> DeviceTypes {get; internal set;}
    ....
    DeviceTypes = DataTableHelpers.DeviceTypes();
    

    查看代码:

    <%= Html.DropDownList("Type", from dt in Model.DeviceTypes
                                  select new SelectListItem
                                  {
                                      Text = dt.Description,
                                      Value = dt.DeviceType.ToString(),
                                      Selected = dt.DeviceType == 1
                                  }) %>
    

    【讨论】:

    • 是的,做到了,谢谢。我想我现在也明白自己做错了什么。
    • 这是一个古老而实用的答案,但请永远不要将 Linq 请求直接写入视图!好的做法是在模型中声明一个int SelectedValue 和一个IEnumerable&lt;&gt; YourEnumerableProperty 属性,然后将其填充到控制器中,最后使用@Html.DropDownListFor(m =&gt; m.SelectedValue, new SelectList(Model.YourEnumerableProperty, "Value", "Text")。视图不应该持有逻辑业务。
    • 视图可以包含逻辑,只要是显示逻辑而不是业务逻辑即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多