2010-03-10 66 views
3

我想在Asp.net MVC與默認ModelBinder的工作不同(派生)對象類型的列表清單2.MVC2 ModelBinder的派生對象

我有以下視圖模型:

public class ItemFormModel 
    {  
     [Required(ErrorMessage = "Required Field")] 
     public string Name { get; set; } 
     public string Description { get; set; } 

     [ScaffoldColumn(true)] 
     //public List<Core.Object> Objects { get; set; }  
     public ArrayList Objects { get; set; }     
    } 

該列表包含不同派生類型的對象,例如

public class TextObject : Core.Object 
    { 
     public string Text { get; set; } 
    } 

    public class BoolObject : Core.Object 
    { 
     public bool Value { get; set; } 
    } 

如果我使用List或ArrayList中實現,一切都得到了很好的腳手架的形式,但回發到的ActionResult時ModelBinder的不爲我解決派生對象類型屬性沒關係。

可能是什麼視圖模型結構的一個很好的解決方案來獲得處理不同的對象類型的列表?爲每個對象類型(例如List,List等)提供一個額外的列表對我來說似乎不是一個好的解決方案,因爲在構建視圖模型和將它映射回域模型時,這會帶來很多開銷。

有關的自定義模型粘結劑結合所有屬性的另一種方法思考,如何才能讓使用數據的註釋這裏接近(驗證所需的屬性等),而大量的開銷?

回答

4

退房的Derived Type ModelBinder in MvcContrib。這允許您通過'typestamping'的模型綁定到派生類型 - 當使用RenderTypedPartial(...)幫助程序時會自動爲您處理。 MvcContrib partials在部分之間保持綁定狀態,因此Name/Id前綴可以在深對象圖上正確維護。如果您使用其他機制(如模板),那麼您需要自己處理打印類型。這在文檔頁面中有解釋。

回到您的問題以及如何使用ModelBinder解析派生類型,您可以使用類似於WCF KnownTypeAttribute的機制註冊派生類型變體,或者您可以在啓動時進行註冊。無論哪種方式,這些變化都會被記錄一次並保持在性能考慮之中。

模型綁定也不會與數據註解/驗證特性干涉的方式解決了這個問題。他們將按照您在其他任何場景中的預期工作。

+0

目前不支持MVC 4+ – 2013-05-15 08:34:38