我有一个动态表单,带有复选框/单选按钮列表&矩阵:
以下代码呈现复选框列表:
@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个项目,具体取决于在行和列中选择的项目。
但是从Checkbox矩阵(3x3)IList<AnswerResult>
总是得到所有9个项目(无论项目是否被检查,隐藏输入总是有值)
但我想只获取已检查的项目。我如何更改复选框矩阵模板以解决此问题?
答案 0 :(得分:1)
最后我决定在后期行动中处理这个问题。删除未选中的项目(复选框),并在nulls
字段中包含answerResult[##].SubQuestionId
。