У меня есть динамические формы со списками и матрицами флажков / переключателей:
Следующий код отображает список флажков:
@foreach (var sq in Model.SubQuestions)
{
<label>
<input type="hidden" name="answerResult.index" value="@sq.Id" />
<input type="checkbox" name="answerResult[@sq.Id].SubQuestionId" value="@sq.Id" />
@sq.Label.Name
</label>
}
список радиокнопок:
<input type="hidden" name="answerResult.index" value="@Model.Id" />
@foreach (var sq in Model.SubQuestions)
{
<label>
<input type="radio" name="answerResult[@Model.Id].SubQuestionId" value="@sq.Id" />
@sq.Label.Name
</label>
}
Мое POST-действие в контроллере:
[HttpPost]
public ActionResult PassageSurvey(int surveyId, int surveyPageIndex, IList<AnswerResult> answerResult)
где IList<AnswerResult>
- это автоматически связанная коллекция из моей формы. Я получаю только предметы, которые были проверены / выбраны. Все идет хорошо.
Теперь мне нужно получить ту же коллекцию из матриц переключателей / переключателей.
Матрица радиокнопок:
<table width="100%">
<tr>
<th></th>
@foreach (var av in Model.AnswerVariants)
{
<th style="text-align: center;">
<label>@av.Label.Name</label>
</th>
}
</tr>
@foreach (var sq in Model.SubQuestions)
{
<tr>
<td>
<label>@sq.Label.Name</label>
<input type="hidden" name="answerResult.index" value="@sq.Id" />
<input type="hidden" name="answerResult[@sq.Id].SubQuestionId" value="@sq.Id" />
</td>
@foreach (var av in Model.AnswerVariants)
{
<td align="center">
<input type="radio" name="answerResult[@sq.Id].AnswerVariantId" value="@av.Id" />
</td>
}
</tr>
}
</table>
Флажок матрицы:
<table width="100%">
<tr>
<th></th>
@foreach (var av in Model.AnswerVariants)
{
<th style="text-align: center;">
<label>@av.Label.Name</label>
</th>
}
</tr>
@foreach (var sq in Model.SubQuestions)
{
<tr>
<td>
<label>@sq.Label.Name</label>
</td>
@foreach (var av in Model.AnswerVariants)
{
<td align="center">
<input type="hidden" name="answerResult.index" value="@sq.Id" />
<input type="hidden" name="answerResult[@sq.Id].AnswerVariantId" value="@sq.Id" />
<input type="checkbox" name="answerResult[@sq.Id].SubQuestionId" value="@sq.Id" />
</td>
}
</tr>
}
</table>
POST-действие в контроллере всегда одинаково.
Теперь из матрицы переключателей (в текущем примере 3x3) IList<AnswerResult>
всегда получает 3 элемента, в зависимости от элементов, которые были выбраны в строках и столбцах.
Но из матрицы флажков (3x3) IList<AnswerResult>
всегда получает все 9 элементов (независимо от того, какие элементы были проверены, скрытые входы всегда имеют значения)
Но я хочу получить только те элементы, которые были проверены. Как изменить шаблон матрицы чекбокс для решения этой проблемы?