【问题标题】:asp.net mvc checkbox/radiobutton matrix model-bindingasp.net mvc 复选框/单选按钮矩阵模型绑定
【发布时间】:2011-07-20 10:46:28
【问题描述】:

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

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

@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&lt;AnswerResult&gt; 是我表单中的自动绑定集合。我只得到检查/选择的项目。一切顺利。

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

单选按钮矩阵:

<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&lt;AnswerResult&gt; 始终获得 3 个项目,具体取决于在行和列中选择的项目。 但是从 Checkbox matrix (3x3) IList&lt;AnswerResult&gt; 总是得到所有 9 个项目(无论项目是否被检查,隐藏输入总是有值)

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

【问题讨论】:

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


    【解决方案1】:

    最后我决定在我的后期处理中处理这个问题。删除未选中且在 answerResult[##].SubQuestionId 字段中具有 nulls 的项目(复选框)。

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 2011-09-09
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2013-06-29
      相关资源
      最近更新 更多