2

我的模型有一个包含 3 个元素的列表,每个元素都有一个字符串(AnswerBody)和一个布尔值(正确)。当我提交表单时,我得到了完美的值。问题在于,选择多个广播按钮时,它们都会选择。不应该是这样的。选择另一个时,它应该取消选择先前的选择。我被这个技巧困扰了一个星期,我不知道如何解决。任何帮助我将不胜感激。这是我的观点的一部分:

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

1 回答 1

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)
于 2013-06-06T07:19:43.973 回答