у меня есть FeedbackViewModel, который содержит список вопросов:MVC опубликовать список сложных объектов
public class FeedbackViewModel
{
public List<QuestionViewModel> Questions { get; set; }
}
Это QuestionViewModel является объект, который может быть унаследован 5 различных типов вопросов
public class QuestionViewModel
{
public string QuestionText { get; set; }
public string QuestionType { get; set; }
}
Пример одного из наследуемых типов вопросов:
public class SingleQuestionViewModel : QuestionViewModel
{
public string AnswerText { get; set; }
}
В HttpGet
от Index
действий в контроллере я получаю вопросы из базы данных и добавить правильный тип вопроса в списке вопроса в FeedbackViewModel
Тогда я сделать эту модель в представлении:
@using (Html.BeginForm())
{
//foreach (var item in Model.Questions)
for (int i = 0; i < Model.Questions.Count; i++)
{
<div class="form-group">
@Html.DisplayFor(modelItem => Model.Questions[i].QuestionText, new { @class = "control-label col-md-4" })
<div class="col-md-6">
@if (Model.Questions[i].QuestionType == "Single")
{
@Html.EditorFor(modelItem => (Model.Questions[i] as OpenDataPortal.ViewModels.SingleQuestionViewModel).AnswerText)
}
else if (Model.Questions[i].QuestionType == "Multiple")
{
@Html.TextAreaFor(modelItem => (Model.Questions[i] as OpenDataPortal.ViewModels.SingleQuestionViewModel).AnswerText)
}
else if (Model.Questions[i].QuestionType == "SingleSelection")
{
@Html.RadioButtonForSelectList(modelItem => (Model.Questions[i] as OpenDataPortal.ViewModels.SingleSelectionQuestionViewModel).SelectedAnswer,
(Model.Questions[i] as OpenDataPortal.ViewModels.SingleSelectionQuestionViewModel).SelectionAnswers)
}
else if (Model.Questions[i].QuestionType == "MultipleSelection")
{
@Html.CustomCheckBoxList((Model.Questions[i] as OpenDataPortal.ViewModels.MultipleSelectionQuestionViewModel).AvailableAnswers)
}
else if (Model.Questions[i].QuestionType == "UrlReferrer")
{
@Html.EditorFor(modelItem => (Model.Questions[i] as OpenDataPortal.ViewModels.SingleQuestionViewModel).AnswerText)
}
</div>
</div>
<br />
}
<br />
<button type="submit">Submit</button>
}
Теперь я просто не могу заставить его опубликовать список вопросов в модели. Можно ли даже опубликовать список разных типов объектов?
Edit: Ниже приводится список данных в пост, что я обнаружил с помощью Fiddler:
Я не вижу никаких причин, почему она не должна работать. Пока имена входов правильно установлены, вы должны получить данные. однако ваша проблема может возникнуть из-за привязки модели по умолчанию. Ваш сложный тип может быть слишком сложным для _skills_. Вы должны сначала проверить, правильно ли установлены имена, а затем проверить данные, которые отправляются на ваш сервер, и написать собственное связующее устройство. –
@AndreiV - Я проверил имена и значения, которые размещены на странице с помощью скрипача и добавили его в вопрос выше. Значения, похоже, существуют. Считаете ли вы, что мне нужно написать модельное связующее? (никогда не делал этого раньше) – Carel
Не видя точного массива POST, я просто догадываюсь, но: если вы пытаетесь привязать модель к любой коллекции, индексы не могут пропустить число, или связующее устройство модели пропускает все после. Итак, если ваши POSTED-значения были чем-то вроде Вопросов [1] .SelectedAnswer и т. Д., У вас будут проблемы с привязкой модели по умолчанию. –