Wie können Sie Daten (mit ASP.NET MVC) an die Masterseite übergeben, ohne die MVC-Regeln zu verletzen?
Ich persönlich bevorzuge es, einen abstrakten Controller (Basis-Controller) oder eine Basisklasse zu codieren, die an alle Ansichten übergeben wird.
c#
.net
asp.net
asp.net-mvc
Łukasz Sowa
quelle
quelle
Antworten:
Wenn Sie möchten, dass Ihre Ansichten stark typisierte Ansichtsdatenklassen haben, funktioniert dies möglicherweise für Sie. Andere Lösungen sind wahrscheinlich korrekter, aber dies ist meiner Meinung nach eine gute Balance zwischen Design und Praktikabilität.
Die Masterseite verwendet eine stark typisierte Ansichtsdatenklasse, die nur relevante Informationen enthält:
Jede Ansicht, die diese Masterseite verwendet, verwendet eine stark typisierte Ansichtsdatenklasse, die ihre Informationen enthält und aus den Ansichtsdaten der Masterseiten abgeleitet wird:
Da ich nicht möchte, dass einzelne Controller etwas über das Zusammenstellen der Masterseitendaten wissen, kapsle ich diese Logik in eine Factory, die an jeden Controller übergeben wird:
Die Vererbung passt gut zum Master, um die Beziehung anzuzeigen, aber wenn es um das Rendern von Partials / Benutzersteuerelementen geht, werde ich deren Ansichtsdaten in die Seitenansichtsdaten zusammensetzen, z
Dies ist nur Beispielcode und soll nicht so kompiliert werden, wie er ist. Entwickelt für ASP.Net MVC 1.0.
quelle
Ich ziehe es vor, die datengesteuerten Teile der Master-Ansicht in Teilbilder aufzuteilen und sie mit Html.RenderAction zu rendern . Dies hat mehrere eindeutige Vorteile gegenüber dem gängigen Vererbungsansatz für Ansichtsmodelle:
quelle
BEARBEITEN
Generic Error hat unten eine bessere Antwort geliefert. Bitte lies es!
Ursprüngliche Antwort
Microsoft hat tatsächlich einen Eintrag über die "offizielle" Vorgehensweise veröffentlicht . Dies bietet eine schrittweise Anleitung mit einer Erklärung ihrer Argumentation.
Kurz gesagt, sie empfehlen die Verwendung einer abstrakten Controller-Klasse, aber überzeugen Sie sich selbst.
quelle
Abstrakte Controller sind eine gute Idee, und ich habe keinen besseren Weg gefunden. Ich bin gespannt, was andere Leute auch getan haben.
quelle
Ich habe einige Nachforschungen angestellt und bin auf diese beiden Websites gestoßen. Vielleicht könnten sie helfen.
ASP.NET MVC-Tipp Nr. 31 - Übergeben von Daten an Masterseiten und Benutzersteuerelemente
Übergeben von Daten an Masterseiten mit ASP.NET MVC
quelle
Ich finde, dass ein gemeinsames übergeordnetes Element für alle Modellobjekte, die Sie an die Ansicht übergeben, außerordentlich nützlich ist.
Es wird sowieso immer einige gemeinsame Modelleigenschaften zwischen den Seiten geben.
quelle
Das Request.Params-Objekt ist veränderbar. Es ist ziemlich einfach, skalare Werte als Teil des Anforderungsverarbeitungszyklus hinzuzufügen. Aus Sicht der Ansicht könnten diese Informationen im QueryString oder FORM POST bereitgestellt worden sein. hth
quelle
Ich denke, dass ein anderer guter Weg darin bestehen könnte, eine Schnittstelle für die Ansicht mit einer Eigenschaft wie ParentView einer Schnittstelle zu erstellen, sodass Sie sie sowohl für Steuerelemente verwenden können, die einen Verweis auf die Seite benötigen (übergeordnetes Steuerelement), als auch für Hauptansichten, auf die zugegriffen werden soll Ansichten.
quelle
Die anderen Lösungen sind nicht elegant und dauern zu lange. Ich entschuldige mich dafür, dass ich fast ein Jahr später dieses sehr traurige und verarmte Ding gemacht habe:
Ich habe also eindeutig diese statische Methode Get () für SiteMasterViewData, die SiteMasterViewData zurückgibt.
quelle