MVC Рассматривать как форму вопросов и ответов, не получая нулевое значение в действии Post - PullRequest
0 голосов
/ 23 сентября 2019

Если у меня есть 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>
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...