2012-11-21 50 views
1

我的MVC4應用程序中的表單顯示訂單信息。該視圖的模型是OrderViewModel。它有一個屬性Orderlines,它是訂單行的集合。綁定MvcContrib網格內容以查看回發模型

我使用MvcContrib Grid來顯示訂單行。提交表單時,執行以下控制器方法:

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

我的問題是Orderlines屬性在傳入模型參數中始終爲空。其他字段(如客戶名稱)從視圖綁定到視圖模型,但是orderlines集合不是。有沒有辦法將數據從網格綁定到回發到控制器的視圖模型?

問候, 尼爾斯

回答

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; 
    } 
} 
+0

謝謝,這是朝着正確方向邁出的一步。問題在於,網格數據不在表單數據中,當我在模型聯編程序中放置一個斷點並檢查bindingContext時,其他字段在其中,但沒有網格數據。顯然,網格不會將其內容放入表單數據中。 – ngruson