2012-03-23 11 views
0

Ich habe ein Benutzermodell, das eine Sammlung von Geräten enthält. Benutzer können eine beliebige Anzahl von Geräten haben, aber jedes Gerät kann nur einen Benutzer haben.ASP.NET MVC3: Fügen Sie ein Element aus der Liste in die Sammlung eines Modells, von "Bearbeiten" Ansicht

Ich mache eine Seite zum Bearbeiten von Benutzern. Wenn die Gerätesammlung des Benutzers bearbeitet werden muss, zeigt die Ansicht eine Tabelle der dem Benutzer zugeordneten Geräte an, mit den Links Entfernen neben und einer Tabelle der Geräte, die derzeit keinem Benutzer zugeordnet sind, mit Hinzufügungen. Die Ansicht wird in ein Ansichtsmodell eingegeben, das beide Listen enthält.

Dies ist alles innerhalb einer Teilansicht, so dass (im Idealfall) kann dynamisch mit Ajax aktualisiert werden.

Leider bin ich ziemlich neu in ASP.NET und MVC3 und Web-Entwicklung im Allgemeinen. Wie soll ich die Ansicht schreiben, um dies zu implementieren?

Die meisten meiner Annahmen über die Implementierung dieser basieren auf this Tutorial. Er macht etwas ähnliches, aber er verwendet nur @ Html.EditorFor und fügt, was auch immer der Benutzer in das Textfeld eingibt, in die Sammlung ein und wählt kein existierendes Objekt aus. Vermutlich muss ich die ID des ausgewählten Geräts an den Controller zurücksenden, damit es das Gerät zwischen Listen verschieben und die aktualisierte Teilansicht zurückgeben kann. Aber die Ansicht wird in das Ansichtsmodell eingegeben, und (wenn ich mich nicht irre) kann ich keine willkürlichen Daten zurück an den Controller in einem Post senden; Ich kann nur das Viewmodel senden. Es scheint also, dass ich die ID des ausgewählten Geräts in das Ansichtsmodell schreiben muss, bevor ich es zurückschicke, aber wenn ich das tue, verletze ich das gesamte MVC-Muster, indem ich Daten in der Ansicht manipuliere.

Dies ist ein ziemlich rudimentäres Problem, also bin ich mir sicher, dass es viele Lösungen gibt, aber leider fehlt mir genug Domänenwissen, um überhaupt zu wissen, wie man danach sucht.

Antwort

1

Sie können zusätzliche Daten an die Steuerung senden (nicht nur das Ansichtsmodell), z. B. für die Liste der Geräte, die Sie für jedes Element ankreuzen können, jedes Kontrollkästchen muss denselben Namen und einen anderen Wert haben :

<input type="checkbox" name="devices" value="dev1" /> 
<input type="checkbox" name="devices" value="dev2" /> 
<input type="checkbox" name="devices" value="dev3" /> 

In Ihrem Controller kann das Verfahren eine Liste von Daten erhalten ...

public ActionResult UpdateUser(User usermodel,string[] devices){ ... } 

Parameter Geräte eine Liste der Geräte-IDs enthält ausgewählt, wenn der Benutzer das Formular abschickt (unter der Annahme, dass Kontrollkästchen innen sind ein Formular und der Benutzer reicht es ein).

Dies ist ein Weg, es zu tun, sicherlich gibt es andere Möglichkeiten.