MVC3 View с абстрактным свойством

Учтите следующее.

модели

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 собственность Demographics model заново заполнено с правильным количеством вопросов, но они все типа QuestionModel вместо конкретного типа.

Как мне заставить эту вещь понять, какой тип создавать?

3 ответа

Решение

Ответ Фрэзелла сработал бы, если бы моя корневая модель была абстрактной. Однако, это не так для меня, так что в итоге получилось так: http://mvccontrib.codeplex.com/wikipage?title=DerivedTypeModelBinder&referringTitle=Documentation

Встроенная привязка модели в ASP.NET MVC не поддерживает абстрактные классы. Вы можете свернуть свой собственный для обработки класса Abstract, хотя см. ASP.NET MVC 2 - Привязка к абстрактной модели.

Я собираюсь прыгнуть сюда, хотя кажется, что вы уже решили это.

Но бы

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

Работа?

[HttpPost]
public ActionResult Demographics(DemographicsModel<ChooseOneQuestionModel> model)
{
    //...
}
Другие вопросы по тегам