Если у меня есть ViewModel, подобная этой:
public class FormViewModel
{
int Id { get; set; }
public int? ParentID { get; set; }
public string Text { get; set; }
public string RenderType { get; set; }
public int SortOrder { get; set; }
public List<Response> Responses { get; set; }
public Result Result{ get; set; }
}
public class Result
{
public int ResponseID { get; set; }
public int ResponseValue { get; set; }
}
Я хочу отобразить эти вопросы, и для каждого вопроса есть ответ в отдельном списке.Если пользователь отправляет неполную форму, действие должно вернуться в том же виде и сохранить результаты тоже.
Как связать эти значения, учитывая, что модель в представлении - это FormViewModel, и мне нужно пройти через список вопросов и отобразить как текстовые поля, так и переключатели, некоторые из которых обязательны, а другие нет,а некоторые зависят от ответов на другие вопросы?Есть один вопрос с нулевым типом рендеринга, он используется просто как метка.
Я пробовал что-то, но я получаю ноль при публикации в контроллер
public ActionResult Index(FormViewModel model)
{
if (!ModelState.IsValid)
{
return View("Index", model);
}
return View("Confirmation");
}
@model List<FormViewModel>
@using (Html.BeginForm("Index", "Survey", FormMethod.Post, new { id = "Form" }))
{
@for (int i = 0; i < Model.Questions.Count; i++)
{
var question = Model[i];
<div class="title">@((i + 1) + ") " + question.Text)</div>
if (question.RenderType == "RadioButton")
{
<div>
@foreach (var response in question.Responses)
{
<p>
@Html.RadioButtonFor(m => m[i].Result.ResponseID, response.ResponseID, new { @class = "" })
@response.Text
</p>
}
@Html.HiddenFor(m => m[i].Result.ResponseID)
@Html.ValidationMessageFor(m => m[i].Result.ResponseID, null, new { @class = "text-danger" })
</div>
}