asp.net mvc复选框/ radiobutton矩阵模型绑定

时间:2011-03-22 12:17:18

标签: asp.net-mvc checkbox model-binding

我有一个动态表单,带有复选框/单选按钮列表&矩阵:

checkbox & radio-button lists

以下代码呈现复选框列表:

@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>是我表单中的自动绑定集合。我只获得已选中/选中的项目。一切进展顺利。

现在我需要从复选框/单选按钮矩阵中获取相同的集合。

checkbox & radio-button matrices

单选按钮矩阵:

<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个项目(无论项目是否被检查,隐藏输入总是有值)

但我想只获取已检查的项目。我如何更改复选框矩阵模板以解决此问题?

1 个答案:

答案 0 :(得分:1)

最后我决定在后期行动中处理这个问题。删除未选中的项目(复选框),并在nulls字段中包含answerResult[##].SubQuestionId