绑定MvcContrib网格内容以在回发时查看模型

时间:2012-11-21 13:17:50

标签: asp.net-mvc asp.net-mvc-4 mvccontrib mvccontrib-grid

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

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

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

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

此致 尼尔斯

1 个答案:

答案 0 :(得分: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;
    }
}