我正在尝试使用 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 个条目,但其中的所有数据都已丢失。文本设置为System.Web.Mvc.SelectListItem
,其值为null
.
我尝试过改变ToList()
打电话给ToArray()
,以及完全删除它。这并没有改变行为。
我在这里做错了什么?
EDIT:划掉我的第一个答案。
您应该将 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
}) %>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)