ASP.NET MVC中一个模型的多个自定义模型绑定器

时间:2010-03-24 13:42:19

标签: c# asp.net-mvc models modelbinders

这是适用于MVC 1& S的一般模型绑定问题。 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 个答案:

答案 0 :(得分:0)

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

回到这个问题,你提到你需要对IEvent的不同实现做一些绑定,但是你想根据实现IEvent的类型绑定特定的属性。我会说这通常很糟糕。为什么?因为您正在尝试让一个模型绑定器知道一个接口知道它的具体实现。

如果您需要多个类来实现IEvent(由于某种原因),那么您可能需要为每个类定制绑定器(如果沿着这条路线走,虽然它们将是具体类型,然后默认绑定器应该工作),或者您需要扩展IEvent接口以包含您将在其上设置的属性。

记住接口是用来定义需要实现的契约...你不能使用实现它的对象,然后根据它们的类型检查其他属性: - )