2009-08-12 3 views
4

Ich habe Schwierigkeiten, die richtige Vorgehensweise in MVC zu finden, die in WebForms nicht schwierig wäre, und ich hoffe, dass jemand mich darauf hinweisen kann die richtige Richtung.Auswählen von Tabellenzeilen in ASP.NET MVC

Grundsätzlich zeige ich eine Tabelle mit Daten an und der Benutzer sollte in der Lage sein, null oder mehr Zeilen auszuwählen. Wenn sie submit drücken, möchte ich, dass mein Controller weiß, welche Zeilen ausgewählt wurden, da dies andere Daten auf dem Bildschirm beeinflusst.

My View sieht wie folgt aus:

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

Also, wenn die Submit-Button geklickt wird, das Formular an die aktuelle URL veröffentlichen wird. Beachten Sie, dass das Modell "Person" nur ein ViewModel ist, sodass ich bei Bedarf erforderliche UI-Eigenschaften hinzufügen kann. Sollte ich eine "Selected" -Eigenschaft zu Person hinzufügen und meinen Controller eine Liste/ein Array von Person nehmen lassen und die ausgewählte Eigenschaft von jedem prüfen?

Bitte beachten Sie, dass ich eine Lösung brauche, die ohne JavaScript funktioniert, und ich möchte nicht, dass mein Controller sich darum kümmert, wie die Werte der Checkboxen abgerufen werden - ich schreibe gerne einen benutzerdefinierten ModelBinder.

Kann jemand mir eine Idee geben, wie man das bitte macht?

Vielen Dank, Simon.

Antwort

11

Wenn es eine Person ID ist oder eine andere eindeutige Kennung es dann so strukturieren:

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

Sie dann in der Lage sein, um die Rückkehr zu Ihrer Controller-Methode „string [] selectedNames“ hinzufügen, das heißt

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

Das Array enthält den 'Wert' jedes Kontrollkästchens, das geprüft wurde, und nur die, die überprüft wurden!

+0

Dank Lazarus, das funktioniert genau so, wie ich wollte! – Simon