我的MVC4应用程序中的表单显示了订单信息。视图的模型是OrderViewModel。它有一个属性Orderlines,它是订单行的集合。
我正在使用MvcContrib Grid来显示订单行。提交表单时,将执行以下控制器方法:
[HttpPost]
public ActionResult PlaceOrder(OrderViewModel model)
{
...
}
我的问题是传入模型参数中的Orderlines属性始终为null。客户名称等其他字段从视图绑定到视图模型,但订单行集合不是。有没有办法将数据从网格绑定到在回发时发送回控制器的视图模型?
此致 尼尔斯
答案 0 :(得分:0)
您始终可以创建自定义模型装订器并填充数据。在处理内部集合属性和复杂对象时,这尤其有用。一旦你搞清楚,实现这一点非常简单。您需要实现两个类CustomModelBinderAttribute
和IModelBinder
。
您的最终代码如下所示:
[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;
}
}