我有以下课程:
public class PreviewImage_Edit
{
...
public List<GridDetail_Edit> GridDetails { get; set; }
public SelectList GridDetailTypesList { get; set; }
...
}
public class GridDetail_Edit
{
...
public int GridDetailTypeId { get; set; }
...
}
而且,我有一个部分视图,需要一个类型为PreviewImage_Edit的模型,它具有以下代码块:
@model PreviewImage_Edit
...
@if (Model.GridDetails != null)
{
for (var i = 0; i < Model.GridDetails.Count(); i++)
{
...
@Html.DropDownListFor(model => model.GridDetails[i].GridDetailTypeId, Model.GridDetailTypesList)
...
}
}
我正在GridDetail_Edit中正确创建SelectList,下拉列表按预期填充。下面是为第一个GridDetails对象生成的标记:
<select data-val="true" data-val-number="The field GridDetailTypeId must be a number." data-val-required="The GridDetailTypeId field is required." id="GridDetails_0__GridDetailTypeId" name="GridDetails[0].GridDetailTypeId">
<option value="1">Top</option>
<option value="2">Bottom</option>
</select>
单击“保存”按钮后,我已验证所选选项是否已正确保存在数据库中(即使所选选项不是下拉列表中的第一个/默认选项)。但是,当我返回重新编辑时,所选选项仍然是下拉列表中的第一个选项。
我逐步完成代码并验证数据是否已从数据库中正确检索。我甚至将 Html.DropDownListFor 转换为 Html.EditorFor ,并确认存储在数据库中的值正如预期的那样进入视图。 / p>
我使用了 Html.DropDownListFor ,当与之关联的属性是一个整数值时,但从来没有它是一个整数值,它是对象集合的一部分。我会担心到目前为止我所做的事情,但是所有事情似乎都在解决这个关键问题。
到目前为止,我已经尝试将PreviewImage_Edit中的SelectList移动到GridDetail_Edit并单独初始化它们,我已经以编程方式为相应的SelectedListItem设置了“Selected”值。那不起作用......结果相同。
有没有人遇到过这个问题?有关解决此问题的最佳方法的任何建议吗?
更新
以下是填充GridDetailTypesList
的代码片段var gridDetailTypes = _db.GridDetailTypes.OrderBy(g => g.DisplayOrder).ToList();
return new SelectList(gridDetailTypes, "GridDetailTypeId", "Name");
这很简单。 SelectList构造函数的第二个参数表示其值应在“value”属性中使用的字段。我不相信这个问题与value字段是一个整数的事实有关,因为我在同一页面上有类似的代码,并且下拉列表运行正常。唯一的区别是我的“问题”下拉列表在我的ViewModel的集合中。
答案 0 :(得分:0)
我唯一一次看到关于“必须是数字”的下拉列表中的消息,当我搞砸了,当我从数据库加载它们时,OPTION的(数字)值用空格填充。这似乎不是你的问题(你的例子特别显示没有填充)但我肯定想看看GridDetails [0] .GridDetailTypeId的值,以确保它具有正确的类型/值。
希望我能将此添加为评论而不是答案 - 但我的代表还不够高......
答案 1 :(得分:0)
它对我有用的唯一方法是当我的List是一个简单的IEnumerable<string>
时,或者当我将自定义对象的相同属性传递给DataText作为DataValue时。如下:
Html.DropDownListFor(m => m.TypeOfFilter, new SelectList(Model.Filters, "DataText", "DataText")
其中TypeOfFilter是枚举,Model.Filters是List<MySelectItemModel>
。
这样,您可以在生成的HTML中看到选择了正确的选项。