我有几个类如下 -
public class P
{
public int Id { get; set; }
public virtual ICollection<PDetail> PDetails { get; set; }
}
public class PDetail
{
public int Id { get; set; }
public int Type { get; set; }
public double Price { get; set; }
}
现在,在我的视图中,我将其显示为 -
@foreach (var detail in Model.PDetails)
{
<div class="row">
<div class="col-sm-6">
@Html.DropDownListFor(m => detail.Type, (IEnumerable<SelectListItem>)ViewData["Types"], "--Type--", htmlAttributes: new { @class = "form-control" })
</div>
<div class="col-sm-6">
@Html.TextBoxFor(m => detail.Price, "", htmlAttributes: new { @class = "form-control", placeholder = "Price" })
</div>
</div>
}
在这里,我可以为每个详细信息对象显示detail.Price
,但未从detail.Type
下拉列表中选择ViewData["Types"]
。
PS:ViewData["Types"]
只是typeIds = {1,2,3 ...}
我也尝试将视图更改为 -
@for (int i = 0; i < Model.PDetails.Count(); i++)
{
<div class="row">
<div class="col-sm-6">
@Html.DropDownListFor(m => m.PDetails.ElementAt(i).Type, (IEnumerable<SelectListItem>)ViewData["Types"], "--Type--", htmlAttributes: new { @class = "form-control" })
</div>
</div>
}
但它仍然无效。我该怎么办呢?
答案 0 :(得分:1)
感谢您坚持我的一系列问题。我能够重现你的问题,经过大量尝试才能使它发挥作用,似乎这可能只是MVC框架中的一个错误,在4年多以来一直没有被修复。
这个答案提供了两个解决方法: https://stackoverflow.com/a/3529347/1945651
其中一个涉及使用稍微冗长的代码来手动将值添加到ModelState。
另一个要求您的项目列表可以使用方括号(例如数组或IList
/ IList<T>
)进行索引,然后将当前值作为默认值添加到{{1传递给HTML帮助器:
SelectList
你可以尝试一下吗?