asp.net mvc复选框/ radiobutton矩阵模型绑定 [英] asp.net mvc checkbox/radiobutton matrix model-binding
问题描述
我有一个动态形式与复选框/单选按钮列表&矩阵:
以下代码显示复选框列表:
@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]
/ pre>
public ActionResult PassageSurvey(int surveyId,int surveyPageIndex,IList< AnswerResult> answerResult)
其中
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
inanswerResult[##].SubQuestionId
fields.这篇关于asp.net mvc复选框/ radiobutton矩阵模型绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!