2009-08-12 103 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

相關問題