2010-03-24 46 views
1

這是適用於MVC 1 & 2.我不知道是否MVC2會爲了這個美好的一般模型結合的問題,但這裏是我的問題:多個自定義模型粘合劑

我有一個相當複雜的模型:

public interface IEvent 
    public int Id 
    public string Title 
    public List<EventContact> Contacts 
    public List<EventDatesLocations> DatesLocations 

public class EventDatesLocations 
    public int Id 
    public DateTime StartDate 
    public DateTime EndDate 
    public List<EventLocation> Locations 

我有一個自定義模型粘結劑,做基本上所有IEvent結合我IEvent類。我打電話給默認的模型綁定器來綁定Contacts列表,這很好。

我準備開始試圖綁定DatesLocations的東西,但我想確保我正確地做事情。總的來說,我不確定我有關於模型綁定理解的所有細節。如果IEvent中的列表有多個模型聯編程序,或者只有一個IEvent模型聯編程序(如我現在所做的),它會爲所需的列表調用默認聯編程序。

專家如何做到這一點? :P

+1

我m沒有模型綁定的專家,但我不認爲這裏有任何需要定製模型綁定器的東西。你如何約束你的名單?這裏有一篇關於默認活頁夾如何處理它們的文章。 http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx – Ryan 2010-03-24 15:18:00

+0

@Ryan - 使用自定義模型綁定器進行綁定的主要動機是我使用IEvent接口作爲我的主事件對象。使用默認的模型綁定器,它立即告訴我它不能創建IEvent的實例。那個,我需要根據它是什麼類型的IEvent綁定特定的屬性。我使用默認模型聯編程序和配對值提供程序字典 – Dan 2010-03-24 19:58:02

回答

0

看看this question看到一些嵌套的模型綁定。

回到這個問題,你提到你需要對IEvent的不同實現進行一些綁定,但是你希望根據實現IEvent的類型綁定特定的屬性。我會說這通常是不好的。爲什麼?因爲你正試圖讓一個模型聯編程序知道一個接口知道它的具體實現。如果你需要多個類來實現IEvent(出於某種原因),那麼你可能需要爲每個類定製綁定器(如果沿着這條路線走,儘管它們將是具體類型,那麼默認綁定器應該工作),或者你需要擴展IEvent界面以包含您將要設置的所有屬性。

記住接口是沒有定義需要實現合同...你不能用它實現它對象的工作,然後再檢查取決於其他屬性,他們是什麼類型的:-)