【问题标题】:Can't bind model to Controller, MVC3无法将模型绑定到控制器,MVC3
【发布时间】:2013-02-06 06:21:17
【问题描述】:

我有 2 个视图和 1 个 EditorTemplate

第一个视图是 Cart.cshtml 视图,这个视图有一个模型 (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 时有 2 个键:

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

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

【问题讨论】:

  • 尝试用@Html.EditorFor(m => m.SelectedQuantity, Model.QuantityList)替换@Html.DropDownListFor(m => m.SelectedQuantity, Model.QuantityList)

标签: asp.net-mvc-3


【解决方案1】:

是因为偏:

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

在这里,您失去了输入字段名称中所需的CartSummaryModel 前缀。所以不要使用部分使用编辑器模板。

继续将这个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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多