2009-03-18 6 views
3

Ich versuche, eine bearbeitbare Gridview wie Steuerung (Order Spalte) mit diesem Code in der Ansicht zu bauen:Editierbare „Gridview“ wie Kontrolle in ASP.NET MVC

<table> 
    <tr> 
     <th> 
      Name 
     </th> 
     <th> 
      Order 
     </th> 
     <th> 
      <img alt="Save order" src="<%= Url.Content("~/Content/minisave.png") %>" /> 
     </th> 
     <th></th> 
    </tr> 

<% foreach (var item in Model) { %> 

    <tr> 
     <td> 
      <%= Html.Encode(item.Name) %> 
     </td> 
     <td colspan="2"> 
      <%= Html.TextBox("Order", item.Order, new { size = "3" }) %> 
     </td> 
     <td> 
      <%= Html.ActionLink("Edit", "Edit", new { id=item.id }) %> | 
      <%= Html.ActionLink("Details", "Details", new { id=item.id })%> 
     </td> 
    </tr> 

<% } %> 

</table> 

Die Tabelle aussieht Ergebnis:

alt text

Die Fragen sind: Wie kann ich diese Daten in meinem Controller erhalten? Ich brauche ein Formular-Tag um den Tisch herum? Woher weiß ich, welcher Bestellwert zu welchem ​​Datensatz gehört?

Ein paar zusätzliche Fragen: Wenn Sie den Code sehen, füge ich das Größenattribut der Eingabe-Registerkarte, aber wenn der Browser es rendert, ist die Eingabe größer, wie kann ich es beheben?

Danke für Ihre Hilfe!

Antwort

2

Ich habe das schon mal gemacht. Ich tat es, indem ich die ID als Teil des Namens und ein Formular um den gesamten Tisch herum hatte. Auf diese Weise zog der Controller alle Daten aus allen Zeilen und aktualisierte sie alle auf einmal wie eine Tabellenkalkulation.

Das funktioniert gut für eine Arbeitseinheit, wo Sie die Seite bearbeiten und speichern, aber natürlich müssen Sie überlegen, wie Sie mit Ihrer Sperrstrategie umgehen, sei es optimistisch oder pessimistisch.

Allerdings könnte eine bessere Alternative heutzutage sein, Ajax zu verwenden, um bestimmte Werte zu übermitteln, ähnlich wie Google Spreadsheet, vielleicht?