MVC4 - Teilansicht Modellbindung während des Sendens

8

Ich habe View-Modell, das ein anderes Kind-Modell hat, um die Teilansicht (unten) zu rendern.

%Vor%

Dieses PreliminaryInformationViewModel-Ansichtsmodell wird auch als untergeordnete Modelle in einem anderen Ansichtsmodell verwendet, da diese vorläufige Information auf verschiedenen Seiten aktualisiert werden kann.

Also habe ich diese vorläufige Information als separates Teil erstellt und in andere Seiten eingebunden.

%Vor%

Innerhalb des partiellen

%Vor%

Aber das Problem ist während des Sendens dieses vorläufige Modell ist immer Null wegen des Grundes HTML-Name Attribut ist immer als gerendert

aber wenn ich das Elternmodell an das Partielle weitergebe wie unten.

%Vor%

Jetzt wird das HTML-Element als

generiert %Vor%

und es bindet ordnungsgemäß während des Sendens.

Ich verstehe, dass MVC den Elementwert auf der Grundlage des Namensattributwertes bindet, aber die zweite Implementierung würde mich veranlassen, für jede Seite eine Mehrfachpartition zu erstellen, die ich nicht mag.

Bisher konnte ich keine Lösung finden, um mit der ersten Implementierung zu arbeiten. Gibt es eine Möglichkeit, einen vorbereitenden Informationsmodellwert während des Sendens mit der ersten Implementierung zu binden.

    
Sathish 19.12.2013, 23:28
quelle

6 Antworten

25

Ich weiß, es ist ein bisschen spät, aber es könnte jemandem helfen

Wenn Sie ein komplexes Modell haben, können Sie es weiterhin in partielle verwenden:

%Vor%

wo ich das Modell mit der Eigenschaft "Kontakt" definiert habe. Nun fügt HtmlFieldPrefix die Eigenschaftsbindung für jedes Modell hinzu, "damit das Modellbinder das übergeordnete Modell finden kann"

Es gibt einen Blog-Post darüber: Ссылка

.NET Core 2-Bindung

In .NET Core 2 und MVC funktioniert die obige Antwort nicht, die Eigenschaft ist nicht mehr einstellbar.

Wie auch immer die Lösung ist sehr ähnlich.

@ {Html.ViewData.TemplateInfo.HtmlFieldPrefix="Kontakt"; }  @aait Html.PartialAsync ("_ YourPartialName", Model.Contact)

Nachdem Sie Ihr Modell eingereicht haben, wird es erneut gebunden.

Ich hoffe, das hilft

    
cpoDesign 22.12.2014 15:32
quelle
6

Sie müssen eine Editor-Vorlage für PreliminaryInformationViewModel erstellen, um die partielle Ansicht zu ersetzen, und dann mit Html.EditorFor( m => m.PreliminaryInformation ) aufrufen. Referenz diese Lösung . Das Erstellen der Vorlage sollte so einfach sein wie das Verschieben der Teilansicht in das Verzeichnis Views / Shared / EditorTemplates. Html.EditorFor(...) verwendet diese Vorlage automatisch basierend auf dem Typ, den Sie als Modell übergeben (in diesem Fall PreliminaryInformationViewModel )

    
Moho 19.12.2013 23:40
quelle
3

Ich bin auch auf dieses Problem gestoßen. Ich werde meine Lösung mit Ihrem Code erklären. Ich begann damit:

%Vor%

Die Aktion, die dem HTTP-Post entspricht, suchte nach dem übergeordneten Modell. Der HTTP-Post übermittelte das Formular korrekt, aber es gab keinen Verweis in dem Kind, das sich teilweise auf das Elternteil bezieht. Die übergebenen Werte aus dem Child-Partial wurden ignoriert und die entsprechende Child-Eigenschaft blieb null.

Ich habe eine Schnittstelle, IPrelinanInfoCapable, erstellt, die eine Definition für den Kindtyp enthielt, wie folgt:

%Vor%

Ich habe mein Elternmodell dazu gebracht, diese Schnittstelle zu implementieren. Meine Teilansicht verwendet dann die Schnittstelle oben als Modell:

%Vor%

Schließlich kann meine Elternansicht den folgenden Code verwenden, um sich selbst an das untergeordnete Teil zu übergeben:

%Vor%

Dann kann das Kindteil das Kindobjekt wie folgt verwenden:

%Vor%

All dies füllt das übergeordnete Modell korrekt mit dem http-Post zu der entsprechenden Aktion.

    
gregsonian 31.07.2014 15:32
quelle
2

Sie können HtmlFieldPrefix am Anfang Ihrer Teilansicht hinzufügen:

%Vor%

Dies ist der gleiche Ansatz wie von @cpoDesign beschrieben, aber Sie können das Präfix in Ihrer Teilansicht beibehalten, wenn Sie dies tun müssen.

    
Chaholl 26.10.2016 18:34
quelle
0

Tipp: Wenn Sie Ihre EditorFor-Methode aufrufen, können Sie den Namen der Vorlage als Parameter der Html.EditorFor-Methode festlegen. Alternativ können Namenskonventionen Ihr Freund sein. Stellen Sie nur sicher, dass der Dateiname der Editorschablone genau dem Namen des Modelleigenschaftstyps

entspricht

d. Modelleigenschaftstyp 'CustomerViewModel' = & gt; 'CustomerViewModel.cshtml' Editor Vorlage.

    
Tony Pye 05.03.2014 14:20
quelle
0

Bitte nehmen Sie die folgenden Änderungen an Ihrer Teilseite vor. also wird es mit deinem Elternmodell kommen

%Vor%     
ಅನಿಲ್ 31.10.2014 09:21
quelle

Tags und Links