如何在MVC3中更改Html.RadioButtonFor选择?

时间:2013-06-06 07:16:23

标签: asp.net-mvc asp.net-mvc-3 c#-4.0 web-applications c#-3.0

我的模型有3个元素的列表,每个元素都有一个字符串(AnswerBody)和一个bool(正确)。 当我提交表格时,我完全得到了价值。 问题是,当选择多个单选按钮时,它们都保持选中状态。 它应该不是这样的。在选择另一个时,它应该取消选择先前的选择。 我有一个星期坚持这个技巧,我不知道如何解决。 任何帮助,我将不胜感激。 这是我的观点的一部分:

<table>
    <tr>
        <td>
            @Html.TextAreaFor(c => c.AnsLst[0].AnswerBody)
        </td>
        <td>
            @Html.RadioButtonFor(c => c.AnsLst[0].Correct, true)
        </td>
    </tr>
    <tr>

        <td>
            @Html.TextAreaFor(c => c.AnsLst[1].AnswerBody)
        </td>
        <td>
            @Html.RadioButtonFor(c => c.AnsLst[1].Correct, true)
        </td>
    </tr>
    <tr>
        <td>
            @Html.TextAreaFor(c => c.AnsLst[2].AnswerBody)
        </td>
        <td>
            @Html.RadioButtonFor(c => c.AnsLst[2].Correct, true)
        </td>
    </tr>
</table>

1 个答案:

答案 0 :(得分:2)

如果您使用的单选按钮组一次只能选择一个值,则应将它们绑定到视图模型上的单个属性,该属性将保留所选值而不是集合:

<table>
    <tr>
        <td>
            @Html.TextAreaFor(c => c.AnsLst[0].AnswerBody)
        </td>
        <td>
            @Html.RadioButtonFor(c => c.Answer, "value 1")
        </td>
    </tr>
    <tr>
        <td>
            @Html.TextAreaFor(c => c.AnsLst[1].AnswerBody)
        </td>
        <td>
            @Html.RadioButtonFor(c => c.Answer, "value 2")
        </td>
    </tr>
    <tr>
        <td>
            @Html.TextAreaFor(c => c.AnsLst[2].AnswerBody)
        </td>
        <td>
            @Html.RadioButtonFor(c => c.Answer, "value 3")
        </td>
    </tr>
</table>

现在,由于3个单选按钮绑定到视图模型(Answer)上的相同属性,因此在提交表单时,此属性将获取所选答案的值。将要发送的值是作为第二个参数传递给RadioButton助手的值。

所以基本上你的视图模型上会有以下属性来存储答案:

public string Answer { get; set; }

在示例中,我为答案设置了一些任意值,但您可以使用例如答案的ID,以便您可以识别它:

@Html.RadioButtonFor(c => c.Answer, c.AnsLst[0].AnswerId)
@Html.RadioButtonFor(c => c.Answer, c.AnsLst[1].AnswerId)
@Html.RadioButtonFor(c => c.Answer, c.AnsLst[2].AnswerId)