如何在ASP.NET MVC中选择表行

Sim*_*mon 4 c# asp.net asp.net-mvc

我正在努力找出在MVC中做某事的正确方法,这在WebForms中并不困难,我希望有人能够指出我正确的方向.

基本上,我正在显示数据表,用户应该能够选择零行或多行.当他们按下提交时,我希望我的控制器知道哪些行已被选中,因为这将影响屏幕上的其他数据.

我的视图如下所示:

    <form action="/Summary/Index" method="post">
    <table>
        <thead>
            <tr>
                <th></th>
                <th>Name</th>
                <th>Age</th>
            </tr>
        </thead>
        <tbody>
            <% foreach (Person p in Model)
               { %>
            <tr>
                <td>
                    <input type="checkbox" name="" /> <!-- HOW SHOULD THIS BE RENDERED? -->
                </td>
                <td><%= p.Name %></td>
                <td><%= p.Age %></td>
            </tr>
            <% } %>
        </tbody>
    </table>

    <input type="submit" value="Update" />

</form>
Run Code Online (Sandbox Code Playgroud)

因此,当单击提交按钮时,表单将发布到当前URL.请注意,模型"Person"只是一个ViewModel,因此我可以根据需要添加任何必要的UI相关属性.我应该向Person添加一个'Selected'属性并让我的控制器获取Person的列表/数组并检查每个属性的选定属性吗?

请注意,我需要一个无需JavaScript的解决方案,我不希望我的控制器关注如何检索复选框的值 - 如果需要,我很乐意编写自定义的ModelBinder.

任何人都可以告诉我如何做到这一点吗?

非常感谢,西蒙.

Laz*_*rus 11

如果有人员ID或其他唯一标识符,则由此构建它:

        <% foreach (Person p in Model)
           { %>
        <tr>
            <td>
                <input type="checkbox" name="selectedNames" value="<%= p.ID %>" /> <!-- HOW SHOULD THIS BE RENDERED? -->
            </td>
            <td><%= p.Name %></td>
            <td><%= p.Age %></td>
        </tr>
        <% } %>
Run Code Online (Sandbox Code Playgroud)

然后,您可以将返回值添加到控制器方法"string [] selectedNames",即

public void ProcessReturn(string[] selectedNames)
{
  foreach (string nameID in selectedNames)
  {
    ProcessNameByID(nameID);
  }
}
Run Code Online (Sandbox Code Playgroud)

该数组将包含已选中的每个复选框的"值",并且仅包括已检查的复选框!