1

我的 MVC4 应用程序中的一个表单显示了订单信息。视图的模型是 OrderViewModel。它有一个属性 Orderlines,它是订单行的集合。

我正在使用MvcContrib Grid来显示订单行。提交表单时,将执行以下控制器方法:

[HttpPost]
public ActionResult PlaceOrder(OrderViewModel model)
{
   ...
}

我的问题是 Orderlines 属性在传入模型参数中始终为空。客户姓名等其他字段从视图绑定到视图模型,但订单线集合没有。有没有办法将网格中的数据绑定到在回发时发送回控制器的视图模型?

问候,尼尔斯

4

1 回答 1

0

您始终可以创建自定义模型绑定器并填充数据。这在处理内部集合属性和复杂对象时特别有用。实现这一点非常简单,一旦你弄清楚了。您需要实现两个类CustomModelBinderAttributeIModelBinder.

您的最终代码将如下所示:

[HttpPost]
public ActionResult PlaceOrder([OrderCustomModelBinder] OrderViewModel model)
{
   ...
}

public class OrderCustomModelBinderAttribute : CustomModelBinderAttribute
{
    public override IModelBinder GetBinder()
    {
        return new OrderBinder();
    }
}

public class OrderBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        // your posted form data is in bindingContext.ValueProvider.GetValue("myField")
        // the object you return should be of type OrderViewModel 

        OrderViewModel result = new OrderViewModel();
        // populate Orderlines property

        return result;
    }
}
于 2012-11-21T14:30:42.127 回答