无法将模型绑定到Controller,MVC3

时间:2013-02-06 06:21:18

标签: asp.net-mvc-3

我有2个视图和1个EditorTemplate

第一个视图是Cart.cshtml视图,此视图有一个Model(CartModel) 在此视图内部,使用以下方法调用第二个视图:

@Html.Partial("OrderSummary", Model.CartSummaryModel)

在OrderSummary.cshtml视图中,我有这个

@Html.EditorFor(m => m.OrderItems)

在EditorTemplate(称为OrderItemModel)中我有

@Html.DropDownListFor(m => m.SelectedQuantity, Model.QuantityList)

问题是当在最顶层视图(Cart.cshtml)上导致模型未在控制器中绑定时,“CartSummaryModel”为空。当交换到FormCollection时,有两个键是:

OrderItems[0].SelectedQuantity
OrderItems[1].SelectedQuantity

如何将表单集合数据绑定到Controller的操作方法?

1 个答案:

答案 0 :(得分:1)

这是因为部分:

@Html.Partial("OrderSummary", Model.CartSummaryModel)

此处您丢失输入字段名称中所需的CartSummaryModel前缀。所以不使用partials而是使用编辑器模板。

继续将此OrderSummary.cshtml移至EditorTemplates/OrderSummary.cshtml,然后在您的视图中替换:

@Html.Partial("OrderSummary", Model.CartSummaryModel)

使用:

@Html.EditorFor(x => x.CartSummaryModel, "OrderSummary")

如果CartSummaryModel属性的类型是OrderSummary,您甚至不需要指定编辑器模板的名称,因为ASP.NET MVC会按惯例找到它:

@Html.EditorFor(x => x.CartSummaryModel)

现在你很高兴,你会看到发送到服务器的正确密钥:

CartSummaryModel.OrderItems[0].SelectedQuantity
CartSummaryModel.OrderItems[1].SelectedQuantity