我必须在这里遗漏一些简单的东西。这段代码工作正常,我似乎无法弄清楚它停止的原因。
首先,我在控制器中生成一个选择列表,如下所示:
// Select List
ViewData["FieldTypesList"] = new SelectList(
genesisRepository.FieldTypes, "ftID", "ftName"
);
使用此选择列表的视图如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Genesis.Domain.Entities.Stream2FieldTypes>" %>
<%@ Import Namespace="Genesis.Domain.Entities" %>
<%: Html.DropDownListFor(
model => model.FieldTypeID,
(SelectList)ViewData["FieldTypesList"]
)%>
<%:Model.FieldTypeID.ToString() %>
然而......生成的HTML显示了这一点:
<select id="Stream2FieldTypes_0_" name="Stream2FieldTypes[0]"><option value="1">Text Area</option>
<option value="2">Text Box</option>
<option value="3">Rich Text</option>
<option value="4">Image</option>
<option value="5">DateTime</option>
<option value="6">Decimal</option>
<option value="7">Integer</option>
</select>
3 <!--FYI: current value-->
我完全不知道为什么视图不会渲染选择3(富文本)的html。
你们觉得我的思考过程有什么问题吗?
答案 0 :(得分:2)
我认为您忘记将所选值传递给构造函数
ViewData["FieldTypesList"] = new SelectList(
genesisRepository.FieldTypes, "ftID", "ftName", myModel.FileTypeID)
);
答案 1 :(得分:1)
您可以在控制器中使用SelectList Constructor
的重载来处理它 ViewData["FieldTypesList"] = new SelectList(
genesisRepository.FieldTypes, "ftID", "ftName"
new (ftID=3, ftName="Rich Text");
答案 2 :(得分:1)
感谢@hunter和@John_Hartstock将我指向selectlist实例,而不是专注于DropDownListFor()方法。
我最终通过在视图中构建选择列表而不是控制器来解决错误。控制器编辑为:
ViewData["FieldTypesList"] = genesisRepository.FieldTypes;
// Returns IEnumerable of FieldTypes
将视图更改为:
<%: Html.DropDownListFor(
model => model.FieldTypeID,
new SelectList((IEnumerable<FieldTypes>)ViewData["FieldTypesList"],
"ftID",
"ftName",
Model.FieldTypeID ))
%>
这完美无缺。