【问题标题】:MVC3 View With Abstract Property具有抽象属性的 MVC3 视图
【发布时间】:2011-09-21 23:04:34
【问题描述】:

考虑以下内容。

型号

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返回服务器后,Demographics modelQuestions 属性将重新填充正确数量的问题,但它们都是QuestionModel 类型而不是具体类型。

如何让这个东西明白要实例化什么类型?

【问题讨论】:

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


    【解决方案1】:

    如果我的根模型是抽象的,Frazell 的回答会奏效。然而,对我来说不是这样,所以最终的工作是这样的:http://mvccontrib.codeplex.com/wikipage?title=DerivedTypeModelBinder&referringTitle=Documentation

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我要跳到这里,尽管看起来你已经解决了。

      但是会

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

      工作?

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

      【讨论】:

      • 在我的情况下不是,因为具体的QuestionModel 类可以混合在List 中。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      相关资源
      最近更新 更多