无法将模型属性绑定到选择列表项
本文关键字:选择 列表 绑定 属性 模型 | 更新日期: 2023-09-27 18:34:43
我有几个类,如下所示-
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
如下所述,我将视图更改为(根据ICollection
PDetails
进行了一些修改(-
@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>
}
但它仍然不起作用。PDetails
ICollection
和绑定列表IEnumerable
可能导致此问题的事实是否可能导致此问题?
>你应该在lambda表达式中声明的变量m =>
@for (int i = 0; i < Model.PDetails.Length; i++)
{
<div class="row">
<div class="col-sm-6">
@Html.DropDownListFor(m => m.PDetails[i].Type, (IEnumerable<SelectListItem>)ViewData["Types"], "--Type--", htmlAttributes: new { @class = "form-control" })
</div>
</div>
}
终于通过另一篇文章找到了解决方案,所以把它放在这里。这是由于 MVC4 中的错误与 DropDownList 在此处详细介绍的绑定 - https://stackoverflow.com/questions/3501498
我将视图更改为如下所示,它工作正常。
@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, new SelectList(ViewData["Types"] as IEnumerable, "Value", "Text", Model.PDetails.ElementAt(i).Type), "--Type--", htmlAttributes: new { @class = "form-control" })
</div>
</div>
}