2012-08-29 8 views
6

Ich bin ganz neu in MVC 3.MVC das Senden von Daten von View Controller zu

Ich weiß, wie zu einer Ansicht eine stark typisierte Objekt von einem Controller zu senden. Was ich jetzt habe, ist eine View, die eine Tabelle/ein Formular enthält, die aus diesen Daten besteht.

Der Benutzer kann diese Daten ändern, während sie sich in dieser Ansicht (HTML-Seite) befinden.

Wenn sie auf "Speichern" klicken, wie schicke ich die Daten von der Ansicht zurück an den Controller, damit ich meine Datenbank aktualisieren kann.

Überladen Sie die Controller-Methode, so dass sie einen Parameter des Modelltyps akzeptiert? Können Sie bitte etwas Quellcode zur Verfügung stellen?

(Bitte zeigen Sie nicht den Code der persistenten Daten zu einer Datenbank, ich weiß, wie man diesen Teil macht).

Vielen Dank für Ihre Hilfe.

würde ich auch lieber zu @Html.BeginForm()

Antwort

9

Ich mag es, eine Aktionsmethode für meine Post-Daten erstellt. Also lassen Sie uns sagen, dass Sie eine UserViewModel haben:

public class UserViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

dann einen Usercontroller:

public class UserController 
{ 
    [HttpGet] 
    public ActionResult Edit(int id) 
    { 
     // Create your UserViewModel with the passed in Id. Get stuff from the db, etc... 
     var userViewModel = new UserViewModel(); 
     // ... 

     return View(userViewModel); 
    } 

    [HttpPost] 
    public ActionResult Edit(UserViewModel userViewModel) 
    { 
     // This is the post method. MVC will bind the data from your 
     // view's form and put that data in the UserViewModel that is sent 
     // to this method. 

     // Validate the data and save to the database. 

     // Redirect to where the user needs to be. 
    } 
} 

Ich nehme an, Sie ein Formular in Ihrer Ansicht nach bereits. Sie sollten sicherstellen, dass das Formular die Daten an die richtige Aktionsmethode weitergibt. In meinem Beispiel würden Sie das Formular wie folgt erstellen:

@model UserViewModel 

@using (Html.BeginForm("Edit", "User", FormMethod.Post)) 
{ 
    @Html.TextBoxFor(m => m.Name) 
    @Html.HiddenFor(m => m.Id) 
} 

Der Schlüssel zu all dem ist die Modellbindung, die MVC tut. Nutzen Sie die HTML-Helfer, wie die Html.TextBoxFor, die ich verwendet habe. Außerdem werden Sie die obere Zeile des von mir hinzugefügten Ansichtscodes bemerken. Das @model teilt der Ansicht mit, dass Sie ein UserViewModel senden werden. Lassen Sie den Motor für Sie arbeiten.

Edit: Guter Anruf, tat das alles im Editor, vergaß ein HiddenFor für die ID!

+2

+1 schrieb praktisch die gleiche Antwort. Auch für den View-Teil könnten Sie einfach [EditorForModel()] (http://msdn.microsoft.com/en-us/library/ee430917 (v = vs.98) .aspx) zusammen mit DataAnnotations zur Steuerung der Ausgabe, anstatt jede bearbeitbare Eigenschaft manuell einzurichten. – James

+1

Toller Fang @nonnb! Bearbeitet mein Beispiel. – Gromer

+0

@James, ich habe nie wirklich viel mit EditorForModel gemacht, und ich bin mir nicht sicher, wie kompliziert seine Seite ist. Guter Vorschlag, obwohl. – Gromer

1

In MVC, der Akt der Auskratzen Daten von POST oder GET HttpRequests bezeichnet Verwendung als Modell Bindung - es gibt viele SO questions in Zusammenhang mit dieser sind.

Out-of-the-Box wird MVC Ihre Get und Post-Variablen basierend auf Konvention binden, z. Ein Formularfeld mit dem Namen 'FormName' wird an einen Parameter auf Ihrem Controller mit demselben Namen gebunden.

Modellbindung funktioniert auch für Objekte - MVC wird ein Objekt für Ihren Controller instanziieren und die Eigenschaften mit demselben Namen wie Ihr Formular festlegen.

+0

Können Sie mich auf einen Quellcode verweisen, damit ich ihn studieren kann? – Subby

Verwandte Themen