2009-08-12 43 views
4

我竭力要弄清楚正确的方式做在MVC一些东西,不会在WebForms的困难,我希望有人能够指出我正确的方向。如何在ASP.NET MVC中选择表行

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

我的视图看起来是这样的:

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

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

请注意,我需要一个可以在没有JavaScript的情况下工作的解决方案,而且我不希望我的控制器关心复选框的值如何检索 - 如果需要,我很乐意编写自定义的ModelBinder。

任何人都可以给我一个想法如何做到这一点吗?

非常感谢, 西蒙。

回答

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> 
     <% } %> 

然后,您可以添加返回到您的控制器方法“的String [] selectedNames”,即

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

的阵列将包括这是检查每个复选框的“价值”,只有那些已检查!

+0

谢谢拉撒路,它的工作原理与我想要的完全一样! – Simon 2009-08-13 10:15:54

相关问题