2017-06-24 4 views
0

Ich habe ein Formular mit wenigen Eingängen, name, email, message und einige checkboxes. Ich habe ein Modell für diese Eingaben erstellt und setze alle erforderlichen Validierungen ein.Übergabe eines Modells an den nächsten Controller aus Sicht

Aber jetzt möchte ich auch mein Modell (d. H. Von @model MyModel) oder vielmehr eine Objekteigenschaft meines Modells zusammen mit diesen Eingaben übergeben.

Befüllt ein VewBag/viewData mit meinem Modell einen Weg zu gehen?

@{ 
     ViewBag.MyModel = Model; 
     // or ViewBag.ThatProperty = Model.ThatProperty 
} 

oder habe ich noch einen besseren Weg in meinem Ärmel?

Antwort

1

ViewBag und Viewdata besteht in einer Reise vom Server zum Client, und nicht umgekehrt.

Es gibt keine Möglichkeit, ein Objekt von der Ansicht an den Controller zu übergeben. Wenn es sich um ein Datenbankobjekt handelt, können Sie die Objekt-ID mit einer der beiden unten beschriebenen Methoden übergeben und anschließend den DB nach der Anfrage abfragen.

Wenn Sie keine andere Möglichkeit haben, können Sie das Objekt als JSON-Zeichenfolge codieren (z. B. mit dem Newtonsoft-Paket) und es auch mit einer der beiden unten beschriebenen Methoden übergeben. Dies ist jedoch nicht die beste Option .

Um eine Eigenschaft aus der Ansicht an den Controller übergeben, haben Sie zwei Möglichkeiten:

  • URL Parameter
  • verstecktes Feld

URL Parameter

<form ... asp-route-ThatProperty="@Model.ThatProperty"> 
... 
</form> 

Formularfeld

<form> 
<input type="hidden" name="ThatProperty" value="@Model.ThatProperty" /> 
</form> 

Controller Aktion

Wenn 'ThatProperty' nicht auf Modell existiert, wird es als zusätzlichen Parameter erhalten.

public IActionResult MyAction (MyModel model, string ThatProperty) 
{ 
    ... 
} 
+0

das Problem ist, 'ThatProperty' ist ein Objekt nicht eine einfache Eigenschaft wie' int' oder 'string' –

+0

Es gibt keine Möglichkeit, ein Objekt aus der Sicht auf den Controller zu übergeben. Wenn es sich um ein Datenbankobjekt handelt, können Sie die ID des Objekts übergeben und die Datenbank im Formularpost abfragen. –

+0

Ich sehe. Vielen Dank. Ich werde nur relevante Eigenschaften extrahieren. –

Verwandte Themen