模型绑定MVC 3中的接口数组

时间:2012-02-08 23:52:36

标签: c# asp.net-mvc-3 model-binding

我正在寻找一种在MVC 3中实现以下目标的方法。

假设我有一个带有一个问题的页面。在帖子上,我想绑定以下ViewModel:

public class QuestionElementViewModel
{
    public int QuestionId { get; set; }
    public string Name { get ; set; }
    public string Question { get; set; }
    public string Feedback { get; set; }
}

这可以很容易地完成(如果我在视图中使用正确的名称):

[HttpPost]
public ActionResult Index(QuestionElementViewModel pm)
{
    //Do something
}

现在我的页面上有多个问题。使用这里解释的技术:http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx我也可以很容易地做到这一点:

[HttpPost]
public ActionResult Index(QuestionElementViewModel[] pm)
{
    //Do Something
}

但是我可以说我没有问题,但页面上的元素不同,这些元素可能会有所不同。是否有可能实现这样的目标:

[HttpPost]
public ActionResult Index(IElementViewModel[] pm)
{
    //Do Something
}

哪个实现此接口的ViewModel会自动绑定?

我已经尝试过这段代码并导致错误:无法创建界面实例,这听起来非常明显。

我认为我应该创建一个自定义模型绑定器,但我对此并不十分熟悉,而且我不想过多地偏离标准的MVC框架。

1 个答案:

答案 0 :(得分:1)

您将需要一个自定义模型绑定器用于此方案,因为您使用的是接口,并且默认模型绑定器不知道要实例化哪个实现。因此,一种可能的技术是使用包含每个元素的具体类型的隐藏字段。这里的an example可能会让您走上正轨。