无法将选择列表项绑定到模型属性
本文关键字:绑定 模型 属性 列表 选择 | 更新日期: 2023-09-27 18:34:48
我有几个类,如下所示-
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...}的字典
信息1
我还尝试将视图更改为 -
@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>
}
但它仍然不起作用。我该如何修复它?
感谢您坚持回答我的一连串问题。我能够重现您的问题,经过大量尝试使其工作,似乎这可能只是 MVC 框架中的一个错误,该错误已超过 4 年未修复。
此答案提供了两种解决方法:https://stackoverflow.com/a/3529347/1945651
一个涉及使用一些有点冗长的代码来手动将值添加到ModelState。
另一个要求你的项目列表可以用方括号(例如数组或IList
/IList<T>
(进行索引,然后涉及将当前值作为默认值添加到传递给 HTML 帮助程序的SelectList
中:
@for (int i = 0; i < Model.PDetails.Count(); i++)
{
<div class="row">
<div class="col-sm-6">
@Html.DropDownListFor(m => m.PDetails[i].Type,
new SelectList(ViewData["Types"] as IEnumerable,
"Value", "Text", Model.PDetails[i].Text),
"--Type--",
htmlAttributes: new { @class = "form-control" })
</div>
</div>
}
你能试一试吗?