2012-02-08 75 views
0

我正在寻找一种方法来实现MVC 3中的以下内容:MVC 3中的接口的模型绑定3

比方说,我有一个页面有一个问题。在一个帖子,我想结合以下视图模型:

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 
} 

,每一个实现此接口视图模型自动绑定?

我试过这段代码,它导致一个错误:无法创建接口的实例,这听起来很明显。

我想我应该创建一个自定义模型粘结剂,但我不是很熟悉,我不想步从标准的MVC框架太多了..

回答

1

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

+0

简直太棒了,正是我所期待的。 – Pbirkoff 2012-02-09 00:01:35