2011-02-11 38 views
2

我有一個窗體,張貼一堆隱藏的變量,一些具有相同的名稱。這裏的帖子正文:MVC 3自定義ModelBinder不被使用

OfferId=3802&DeliveryDate=11%2F02%2F2011&DeliveryTime=12%3A00&location=1&location=698 

它,它發佈到一個MVC動作:

[HttpPost] 
public ActionResult DeliveryOptions(DeliveryOptions model) 
{ 
    ... 
} 

的DeliveryOptions模型是這樣的:

public class DeliveryOptions 
{ 
    public long? OfferId { get; set; } 

    [CustomValidation(typeof(CustomValidator), "IsDeliveryDateValid")] 
    public DateTime? DeliveryDate { get; set; } 

    public DateTime? DeliveryTime { get; set; } 

    [CustomValidation(typeof(CustomValidator), "IsLocationsValid")] 
    public OfferLocations Locations { get; set; } 
} 

現在,我想解析貼location變量轉換爲OfferLocations對象,如下所示:

[ModelBinder(typeof(OfferLocationsModelBinder))] 
public class OfferLocations 
{ 
    [Required] 
    public int[] LocationIds { get; set; } 
} 

模型綁定目前看起來是這樣的:

public class OfferLocationsModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     throw new NotImplementedException(); 
    } 
} 

的問題是,我不能在NotImplementedException突破。模型聯編程序不執行。我可能錯過了一些明顯的東西;有任何想法嗎?

回答

0

無法讓這個工作。必須實施一種解決方法。

我現在將位置ID發佈爲CSV字符串,並且它們正在被自定義模型綁定器拾取,因此可以解析到數組中。恥辱我不能以其他方式去做。

0

ModelBinder是否註冊了DepedencyResolver?我不知道MVC是否無法找到您的ModelBinder,並且正在回落到默認模式。

+0

我試圖在全球註冊模型綁定.asax Application_Start,但沒有幫助。另外,項目中還有其他幾個自定義模型粘合劑,它們看起來很像我的,它們也可以工作。我只是不明白爲什麼我的沒有。我是否需要將'location'後綴變量重命名爲其他內容? – Edgar

2

嘗試從System.Web.Mvc.DefaultModelBinder繼承模型活頁夾,並覆蓋object BindModel(ControllerContext, ModelBindingContext)方法。看看這是否有效。如果是這樣 - 你可以從那裏工作:)

這就是我現在正在做的。基本上,我必須確保如果請求中包含特定類型,則會針對此值執行一種方法。模型聯編程序註冊碼完全相同 - 屬性應用於該屬性的類。

模型粘合劑如下:

public class TableModelBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var result = base.BindModel(controllerContext, bindingContext) as ITableModel; 
     if (result != null) 
      result.UpdateSorter(); 
     return result; 
    } 
} 

P.S.從基本模型綁定推導給我的使用標準的MVC編碼結合所有屬性的額外好處,然後我可以延長反序列化對象:)

希望這有助於

+0

在我的解決方法中使用此方法。完美工作是因爲我將發佈的變量更改爲CSV字符串。 – Edgar