MVC3 View с абстрактным свойством - PullRequest
1 голос
/ 22 сентября 2011

Рассмотрим следующее.

Модели

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 ]

3 голосов
/ 22 сентября 2011

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

1 голос
/ 22 сентября 2011

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

0 голосов
/ 22 сентября 2011

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

Но будет ли

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

работать?

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