【问题标题】:ASP.NET Mvc 3 Model binding to a collection not workingASP.NET Mvc 3 模型绑定到集合不起作用
【发布时间】:2011-11-30 15:09:07
【问题描述】:

我正在尝试为一组项目创建一个编辑表单。 List 为空,当我检查 ModelState 时,它​​的 Valid 属性为“true”并且它有 0 个键。 People 实体没有必需的属性。

查看

@using(Html.BeginForm("UpdatePeople", "People", FormMethod.Post }))
{
    @for (var i = 0; i < Model.People.Count; i++)
    {
        <div>


 @Html.TextBoxFor(t => t.People[i].FirstName)



       </div>
     }
}   

控制器

[HttpPost]
public ActionResult UpdatePeople(List<People> items)
{                    
 // items is null
}

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 model-binding


    【解决方案1】:

    您的 Action 方法接收的不是 List&lt;People&gt; 类型的模型,而是接收您的 ViewModel。

    我没有看到您的模型定义,所以请提供一些示例。

    看起来你有一个模型,它有一个名为 People 类型为 List&lt;People&gt; 的属性。

    public class MyViewModel
    {
        public List<People> People { get; set; }
        // other properties
    }
    

    如果您现在提交表单,MVC 会尝试绑定它。您的操作方法说它收到一个

    List<People>
    

    但是你发送MyViewModel

    因此,如果您将操作方法​​更改为

    [HttpPost]
    public ActionResult UpdatePeople(MyViewModel model)
    {                    
        // model.People exists
    
    }
    

    它会起作用的。

    如果您的 ViewModel 只有一个属性People,则不需要此模型。 您可以将List&lt;Person&gt; 传递给您的视图。

    希望这会有所帮助

    【讨论】:

    • Action 方法将绑定到传递给它的任何内容,它可以与随请求发送的内容相匹配。它确实必须是传递给视图的视图模型。它可以是随机属性,也可以是属性与参数名称对齐的任何模型类。
    • 是的,我知道 ModelBinder 是如何工作的。但这就是这里的问题。你是对的,也许我应该更清楚一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多