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.
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
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
)
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.
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
entsprichtd. Modelleigenschaftstyp 'CustomerViewModel' = & gt; 'CustomerViewModel.cshtml' Editor Vorlage.
Tags und Links asp.net-mvc-4