Привязка модели MVC3 к методу моего детского действия
Я использую MVC3 и пытаюсь использовать функцию Child Action @Html.Action()
поэтому у меня есть вид со следующим
@foreach (элемент var в Model.Items){ @Html.Action("GetFormItemView", "Question", item}); }
Это вызывает следующий метод
[ChildActionOnly] public ActionResult GetFormItemView(FormItem formItem) { if (formItem - это FormSection) { вернуть GetSectionView(formItem как FormSection); } иначе если (formItem является QuestionItem) { return GetTypedQuestionView(formItem as QuestionItem); } еще { бросить новый NotImplementedException(); } }
На данный момент бомбы Model Bind говорят мне, что не могут создать абстрактный класс....
Ошибка сервера в приложении '/' Невозможно создать абстрактный класс. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.MissingMethodException: Невозможно создать абстрактный класс.
Как заставить связыватель модели убраться с моего пути - я снабдил Действие необходимой моделью...?
2 ответа
Ударить в темноте, но я думаю, что вам нужно
@foreach (var item in Model.Items){
@Html.Action("GetFormItemView", "Question", new {formItem = item});
}
Проблема в том, что связыватель модели не знает, как воссоздать ваш конкретный класс, основываясь только на параметрах. Посмотрите на это представление сами, и вы увидите, что связыватель моделей не может знать, как создать правильный класс.
Связыватель модели должен быть достаточно умен, чтобы обойти потомков вашего базового класса и создать правильный, но, к сожалению, это не так. Вероятно, есть крайние случаи, которые делают это ненадежным.
Самое простое решение - создать отдельные действия для каждого конкретного типа модели. Существуют более сложные решения, вы можете проверить этот вопрос на примерах.