无法将模型属性绑定到选择列表项

本文关键字:选择 列表 绑定 属性 模型 | 更新日期: 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>
}