asp.net mvc复选框/ radiobutton矩阵模型绑定 [英] asp.net mvc checkbox/radiobutton matrix model-binding

查看:178
本文介绍了asp.net mvc复选框/ radiobutton矩阵模型绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个动态形式与复选框/单选按钮列表&矩阵:





以下代码显示复选框列表:

  @foreach在Model.SubQuestions)
{
< label>
< input type =hiddenname =answerResult.indexvalue =@ sq.Id/>
< input type =checkboxname =answerResult [@ sq.Id] .SubQuestionIdvalue =@ sq.Id/>
@ sq.Label.Name
< / label>
}

单选按钮列表:


$ b b

 < input type =hiddenname =answerResult.indexvalue =@ Model.Id/> 
@foreach(Model.SubQuestions中的var sq)
{
< label>
< input type =radioname =answerResult [@ Model.Id] .SubQuestionIdvalue =@ sq.Id/>
@ sq.Label.Name
< / label>
}

我在控制器中的POST操作:

  [HttpPost] 
public ActionResult PassageSurvey(int surveyId,int surveyPageIndex,IList< AnswerResult> answerResult)
/ pre>

其中 IList< AnswerResult> 是从我的表单自动绑定的集合。我只得到被检查/选择的项目。一切顺利。



现在我需要从checkbox / radio-button矩阵中获取相同的集合。





按钮矩阵:

 < table width =100%> 
< tr>
< th>< / th>
@foreach(var av Model.AnswerVariants)
{
< th style =text-align:center;>
< label> @ av.Label.Name< / label>
< / th>
}
< / tr>

@foreach(Model.SubQuestions中的var sq)
{
< tr>
< td>
< label> @ sq.Label.Name< / label>
< input type =hiddenname =answerResult.indexvalue =@ sq.Id/>
< input type =hiddenname =answerResult [@ sq.Id] .SubQuestionIdvalue =@ sq.Id/>
< / td>

@foreach(var av Model.AnswerVariants)
{
< td align =center>
< input type =radioname =answerResult [@ sq.Id] .AnswerVariantIdvalue =@ av.Id/>
< / td>
}
< / tr>
}
< / table>

复选框矩阵:

 < table width =100%> 
< tr>
< th>< / th>
@foreach(var av Model.AnswerVariants)
{
< th style =text-align:center;>
< label> @ av.Label.Name< / label>
< / th>
}
< / tr>

@foreach(Model.SubQuestions中的var sq)
{
< tr>
< td>
< label> @ sq.Label.Name< / label>
< / td>
@foreach(var av Model.AnswerVariants)
{
< td align =center>
< input type =hiddenname =answerResult.indexvalue =@ sq.Id/>
< input type =hiddenname =answerResult [@ sq.Id] .AnswerVariantIdvalue =@ sq.Id/>
< input type =checkboxname =answerResult [@ sq.Id] .SubQuestionIdvalue =@ sq.Id/>
< / td>
}
< / tr>
}
< / table>

控制器中的POST操作总是相同的。
现在从单选按钮矩阵(在当前示例3x3中) IList< AnswerResult> 总是获得3个项目,这取决于在行和列中选择的项目。
但是从复选框矩阵(3x3) IList< AnswerResult> 总是总共有9个项目(不管项目是否被检查,隐藏 - 输入总是有值)

如何更改我的复选框矩阵模板来解决这个问题?



$ b

$ b

解决方案

最后,我决定在我的post-action中处理这个问题。删除未选择的项目(复选框),并在 answerResult [##]。SubQuestionId 字段中具有 nulls / p>

I have a dynamic forms with checkbox/radio-button lists & matrices:

Following code renders checkbox list:

@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>
}

radio-button list:

<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>
}

My POST-action in controller:

[HttpPost]
public ActionResult PassageSurvey(int surveyId, int surveyPageIndex, IList<AnswerResult> answerResult)

where IList<AnswerResult> is an auto-bound collection from my form. I get only items that were checked/selected. Everything is going well.

Now I need to get the same collection from checkbox/radio-button matrices.

Radio-button matrix:

<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>

Checkbox matrix:

<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-action in controller always the same. Now from radio-button matrix (in current sample 3x3) IList<AnswerResult> gets always 3 items, depending on items that were selected in rows and columns. But from Checkbox matrix (3x3) IList<AnswerResult> gets always all 9 items (regardless items were checked, hidden-inputs always have values)

But I want to get only items, that were checked. How could I change my checkbox-matrix template to solve this problem?

解决方案

Finally I decided to handle this problem in my post-action instead. Removing items (checkboxes) that were not selected, and have nulls in answerResult[##].SubQuestionId fields.

这篇关于asp.net mvc复选框/ radiobutton矩阵模型绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆