多个自定义模型粘合剂

问题描述:

这是适用于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

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

回到这个问题,你提到你需要对IEvent的不同实现进行一些绑定,但是你希望根据实现IEvent的类型绑定特定的属性。我会说这通常是不好的。为什么?因为你正试图让一个模型联编程序知道一个接口知道它的具体实现。如果你需要多个类来实现IEvent(出于某种原因),那么你可能需要为每个类定制绑定器(如果沿着这条路线走,尽管它们将是具体类型,那么默认绑定器应该工作),或者你需要扩展IEvent界面以包含您将要设置的所有属性。

记住接口是没有定义需要实现合同...你不能用它实现它对象的工作,然后再检查取决于其他属性,他们是什么类型的:-)