1

我有

public class Version
{
    public bool LeftChecked {get; set;}
    public bool RightChecked {get; set;}

    //some other properties
}

List<Version> versions = ...

现在在一个视图中,我想要一个表格,其中的行对应于versions列表项和两列单选按钮:一组中的一列,另一组中的另一列(这样每列中只能选择一个按钮)。棘手的部分是如何将这些单选按钮映射LeftCheckedRightChecked属性,以便正确进行绑定?

编辑 我按照答案中的建议进行了尝试,但是生成的 html 看起来像这样:

<tr>
    <td>        
        <input id="Versions_0__LeftChecked" name="Versions[0].LeftChecked" type="radio" value="1" />    
    </td>    
    <td>    
        <input id="Versions_0__RightChecked" name="Versions[0].RightChecked" type="radio" value="1" />    
    </td>    
</tr>
<tr>
    <td>    
        <input id="Versions_1__LeftChecked" name="Versions[1].LeftChecked" type="radio" value="1" />
    </td>
    <td>
        <input id="Versions_1__RightChecked" name="Versions[1].RightChecked" type="radio" value="1" />
    </td>
</tr>

这是不行的,因为相同的列name属性应该是相同的。此外,它似乎没有绑定到我的 C# 类。好吧,javascript 的方法做得又快又好……

4

1 回答 1

4

您应该能够遍历视图中的版本集合并使用 Html.CheckboxFor 帮助器来创建复选框。如果您使用下面的语法,您将在发布表单时获得正确的绑定。

...other form fields

@for (int i  = 0; i < Model.Versions.Count; i++)
{
    <tr>
       <td>
          <label>Left</label>
          @Html.CheckBoxFor(x => x.Versions[i].LeftChecked)
       </td>
       <td>
          <label>Right</label>
          @Html.CheckBoxFor(x => x.Versions[i].RightChecked)
       </td>
    ... other properties
    </tr>
}

haacked 有一篇很好的文章解释了基础知识 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

于 2012-06-03T14:49:10.327 回答