MVC3视图与抽象属性

时间:2011-09-21 23:04:34

标签: asp.net-mvc-3 inheritance model abstract-class

请考虑以下事项。

模型

public class DemographicsModel
{
    public List<QuestionModel> Questions { get; set; }
}

//Does not work at all if this class is abstract.
public /*abstract*/ class QuestionModel
{
    //...
}

public class ChooseOneQuestionModel : QuestionModel
{
    //...
}

public class ChooseManyQuestionModel : QuestionModel
{
    //...
}

public class RichTextQuestionModel : QuestionModel
{
    //...
}

public class TextQuestionModel : QuestionModel
{
    //...
}

控制器

[HttpPost]
public ActionResult Demographics(DemographicsModel model)
{
    //...
}

我的观点会有DemographicsModel,其中包含如上所示的所有不同类型的众多问题。表单完成并POST回到服务器后,Questions的{​​{1}}属性将重新填充正确的问题数,但它们都是{{1}类型而不是具体的类型。

如何让这个东西理解要实例化的类型?

3 个答案:

答案 0 :(得分:3)

如果我的根模型是抽象的模型,那么Frazell的答案就会奏效。但是,对我来说情况并非如此,所以最终工作的是:http://mvccontrib.codeplex.com/wikipage?title=DerivedTypeModelBinder&referringTitle=Documentation

答案 1 :(得分:1)

ASP.NET MVC内置的模型绑定不支持抽象类。您可以滚动自己来处理Abstract类,但请参阅ASP.NET MVC 2 - Binding To Abstract Model

答案 2 :(得分:0)

我会跳到这里,即使看起来你已经解决了它。

但是

public class DemographicsModel<T> Where T : QuestionModel
{
    public List<T> Questions { get; set; }
}

工作?

[HttpPost]
public ActionResult Demographics(DemographicsModel<ChooseOneQuestionModel> model)
{
    //...
}