2012-03-28 9 views
0

Wie kann ich ein (binded) Modell von einer Ansicht an eine Controller-Methode zurückgeben, die kein [httppost] ist?Zurückgegebenes Modell von Ansicht an (nicht-httppost) Controller-Methode übergeben

Ausblick:

@Html.EditorFor(model => model.Name)    
    @Html.DisplayFor(model => model.Model) 

    // Table displays more properties of model 

    <input type="button" title="GetStuff" value="Get Stuff" onclick="location.href='@Url.Action("GetStuff")'" /> 

Controller-Methode:

public ActionResult GetStuff(ViewModel Model /* Realize this is non-httppost but...how can I get the model back with this type of scenario */) 
    { 
    // Get the name from per the model of the main view if the user changed it 
    string theName = Model.Name; 

    Model2 m2 = new Model2(){name = theName}; 
    return ("someView", Model2); 
    } 

Antwort

2

Anstatt eigene Abfragezeichenfolgen zu schreiben, wickeln Sie einfach EditorFor Zeug in einer using Html.BeginForm() Anweisung, entfernen Sie das Javascript von Ihrer Schaltfläche, und ändern Sie die Schaltfläche zu einem Übermittlungsart.

@using (Html.BeginForm("GetStuff", "Controller", FormMethod.Get) 
    { 
     @Html.EditorFor(model => model.Name)    
     @Html.DisplayFor(model => model.Model) 

    // Table displays more properties of model 

     <input type="submit" title="GetStuff" value="Get Stuff"/> 
    } 

Die FormMethod.Get wird eine Abfragezeichenfolge Antrag der Formelemente auf die Aktion/Controller definiert in der Definition Html.BeginForm senden.

+0

Können Sie mir sagen, wie die Sig für den Controller aussehen würde? – JaJ

+0

Genau wie das, was Sie in Ihrer Frage haben, sollte gut funktionieren. – Tommy

2

Da die Art und Weise Sie die Daten in GET-Anforderungen werden über die Query-String ist, dann würden Sie alle diese Daten über die Abfrage zu setzen haben Zeichenfolge. Modellbindung funktioniert, zumindest für einfache Modelle, aber Sie müssen explizit alle Daten in die Aktion aufnehmen. Zum Beispiel:

@Url.Action("GetStuff", new { Name = Model.Name, Model = Model.Model }) 

Aber wenn jeder dieser Daten komplex ist, werden Sie selbst festlegen müssen jeden Subproperty ... Vielleicht sollten Sie nur schreiben? :)

Verwandte Themen