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

4

我正在努力找出在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>

当提交按钮被点击时,表单将会post到当前的url。请注意,模型“Person”只是一个ViewModel,因此我可以添加任何必要的与UI相关的属性。我应该向Person添加一个“Selected”属性,并让我的控制器使用Person列表/数组并检查每个人的选定属性吗?
请注意,我需要一个不需要JavaScript就能工作的解决方案,并且我不希望我的控制器关心如何检索复选框的值-如果需要,我很乐意编写自定义ModelBinder。
请问有人能给我一个想法怎么做吗?
非常感谢, Simon。
1个回答

12

如果有一个人员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>
        <% } %>

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

public void ProcessReturn(string[] selectedNames)
{
  foreach (string nameID in selectedNames)
  {
    ProcessNameByID(nameID);
  }
}

该数组将包含每个被选中复选框的'value'值,仅包括那些被选中的!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接