我正在寻找一种在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框架。
答案 0 :(得分:1)
您将需要一个自定义模型绑定器用于此方案,因为您使用的是接口,并且默认模型绑定器不知道要实例化哪个实现。因此,一种可能的技术是使用包含每个元素的具体类型的隐藏字段。这里的an example可能会让您走上正轨。