Я создаю анкету mvc webapp и не могу понять, как передать неизвестное количество аргументов контроллеру из формы.
Моя форма похожа на:
<% using (Html.BeginForm())
{ %>
<div id="Content">
<% foreach (var group in ViewData.Model.QuestionGroups)
{ %>
<div class="Group">
<%=group.Description %>
<% foreach (var question in group.Questions)
{%>
<div class="Question">
<div class="QuestionTitle">
<%=question.Title %>
</div>
<%=Html.Hidden("Id", question.ID) %>
<div class="QuestionText">
<%switch (question.TypeAsEnum)
{
case QuestionTypeEnum.Text:%>
<%=Html.TextBox("somename") %>
<% break;
case QuestionTypeEnum.Number:%>
<%=Html.TextBox("somename") %>
<% break;
case QuestionTypeEnum.PhoneNumber:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.Email:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.Date:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.YesNo:%>
<%=Html.RadioButton("somename", true)%>
<%=Html.RadioButton("somename", false)%>
<% break;
case QuestionTypeEnum.Alternative:%>
<%=Html.DropDownList("somename", question.Answers)%>
<% break;
}%>
</div>
</div>
<% } %>
</div>
<% } %>
</div>
<div id="submittButton">
<%=Html.SubmitButton()%></div>
<% } %>
Теперь, что мне нужно в моем контроллере, это List ,
где ResponseAnswer имеет свойства:
строка questionID,
строка AnswerText,
bool AnswerBool,
номер AnswerNumber,
...
Так как я могу передать неизвестное количество элементов, содержащих questionID, AnswerType и Answer, в контроллер.
В веб-формах я решил эту проблему путем рендеринга формы с повторителями вместо foreach, а затем итерацией по повторителю вопроса, проверяющему контрольный идентификатор, каждый элемент повторителя содержит скрытый вопросительный элемент и вход с id = AnswerType.
Но это серьезно сломает разделение концерна в mvc?
Так есть ли способ заставить мой контроллер принять List и каким-то образом построить этот список, не нарушая soc, и если нет, то как мне передать весь formresult обратно в контроллер, чтобы я мог выполнить итерацию данные формы там, а не в виде.