我有以下课程:
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并确认存储在数据库中的值正在按预期进入视图。
当与之关联的属性是整数值时,我使用了 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 的集合中。