1

在开始之前,我已经看过这个问题:

编辑器模板中 <List> 项的 asp.net mvc 模型绑定失败

我有一个看起来像这样的模型:

public class PartnerListModel
{
    public List<PartnersModel> Partners { get; set; }

    public PartnerListModel()
    {
        Partners = new List<PartnersModel>();
    }
}

然后我的 PartnersModel 看起来像这样:

public class PartnersModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public bool IsActive { get; set; }
}

我将 PartnersListModel 传递给视图,如下所示:

using (Html.BeginForm("Update", "Partners", FormMethod.Post))
            {
                @Html.EditorFor(m => m.Partners)
                <input type="submit" value="Submit Changes"/>
            }

最后,我的编辑器模板如下所示:

@model AdminWebsite.Models.Partners.PartnersModel
<div>
    <span>
        @Html.DisplayFor(m => m.Name)
    </span>
    <span>
        @Html.EditorFor(m => m.IsActive)
    </span>
    @Html.HiddenFor(m => m.ID)
    @Html.HiddenFor(m => m.Name)
</div>

我的控制器的动作是这样的,并且代码确实设法达到了这个动作:

public ActionResult Update(PartnerListModel partners)

为什么我在模型中的 List 计数为 0?我找不到任何理由说明我的示例与 Stack Overflow 上公认的答案不同。有什么我遗漏的东西可以解释为什么我传回的数据值没有被添加到列表中吗?

使用 Chrome 的开发人员工具,我已经能够确认我有一个类似于以下内容的列表:

  • 合作伙伴[0].IsActive = true
  • 合作伙伴[0].IsActive = false
  • 合作伙伴[0].Name = "嗨"
  • 合作伙伴[0].ID = 1
  • Partners[1].IsActive = false 等。

有任何想法吗?提前致谢。

4

1 回答 1

3

您将 a 传递List<PartnersModel>给 action 方法,但 action-method 需要 a PartnerListModel

您应该像这样更改 Action-method:

public ActionResult Update(List<PartnersModel> partners)

原因是默认的 ModelBinder 实际上并没有嵌套图形。如果您想访问这两个项目,则需要包含两个参数:

public ActionResult Update(PartnerListModel partnerlistmodel, List<PartnersModel> partners){

}

如果你想要一个嵌套模型,你必须实现你自己的模型绑定器。

下面的问题有类似的问题:Binding an editable list of children

于 2013-05-14T21:46:11.823 回答