我有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的操作方法?
答案 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