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)
{
//...
}