【问题标题】:Bind MvcContrib grid contents to view model on postback在回发时将 MvcContrib 网格内容绑定到视图模型
【发布时间】:2012-11-21 13:17:50
【问题描述】:

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

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

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

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

问候, 尼尔斯

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这是朝着正确方向迈出的一步。问题是网格数据不在表单数据中,当我在模型绑定器中放置一个断点并检查 bindingContext 时,其他字段在那里但不是网格数据。显然,网格并没有将其内容放入表单数据中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多