Wie kann ich eine Ansicht einen Teil (Benutzersteuerung) aus einem anderen Ordner rendern lassen? Mit Vorschau 3 habe ich RenderUserControl mit dem vollständigen Pfad aufgerufen, aber mit einem Upgrade auf Vorschau 5 ist dies nicht mehr möglich. Stattdessen haben wir die RenderPartial-Methode, die mir jedoch nicht die gesuchte Funktionalität bietet.
c#
asp.net-mvc
renderpartial
Boris Callens
quelle
quelle
FindPartialView
Methode mit etwas wieif(partialViewName.Contains"/")partialViewName="~/Views/"+partialViewName;
In meinem Fall habe ich MvcMailer (https://github.com/smsohan/MvcMailer) verwendet und wollte auf eine Teilansicht aus einem anderen Ordner zugreifen, der nicht in "Shared" enthalten war. Die oben genannten Lösungen haben nicht funktioniert, aber die Verwendung eines relativen Pfads hat funktioniert.
quelle
Wenn Sie diesen anderen Pfad häufig verwenden, können Sie dies dauerhaft beheben, ohne den Pfad ständig angeben zu müssen. Standardmäßig wird im Ordner "Ansicht" und im Ordner "Freigegeben" nach Teilansichten gesucht. Angenommen, Sie möchten eine hinzufügen.
Fügen Sie Ihrem Modellordner eine Klasse hinzu:
Fügen Sie dann in Ihrer Datei Global.asax.cs die folgende Zeile hinzu:
quelle
Für ein Benutzersteuerelement mit dem Namen myPartial.ascx im Ordner Ansichten / Konto schreiben Sie Folgendes:
quelle
Ich habe eine Problemumgehung erstellt, die ziemlich gut zu funktionieren scheint. Ich habe festgestellt, dass für die Suche nach Aktionsnamen, die Suche nach Ansichten usw. in den Kontext eines anderen Controllers gewechselt werden muss. Um dies zu implementieren, habe ich eine neue Erweiterungsmethode erstellt für
HtmlHelper
:ControllerContextRegion
ist definiert als:In einer Ansicht wird dies folgendermaßen verwendet:
Dies kann zu unerwünschten Nebenwirkungen führen, wenn Ihr Code erfordert, dass sich die
controller
Routenkomponente nicht ändert. In unserem Code scheint dieser Ansatz jedoch bisher keine negativen Auswirkungen zu haben.quelle
Die VirtualPathProviderViewEngine, auf der die WebFormsViewEngine basiert, soll die Zeichen "~" und "/" am Anfang des Pfads unterstützen, damit die obigen Beispiele funktionieren.
Ich habe festgestellt, dass Ihre Beispiele den Pfad "~ / Account / myPartial.ascx" verwenden, aber Sie haben erwähnt, dass sich Ihr Benutzersteuerelement im Ordner "Ansichten / Konto" befindet. Hast du es versucht
oder ist das nur ein Tippfehler in deiner Frage?
quelle
Versuchen Sie Folgendes, wenn Leser ASP.NET Core 2.1 oder höher verwenden und die Partial Tag Helper- Syntax verwenden möchten :
Die Tilde (~) ist optional.
Die Informationen unter https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-3.1#partial-tag-helper sind ebenfalls hilfreich.
quelle
Sie sollten dies versuchen
Platzieren Sie das
~/Views/
vor Ihrem Codequelle
Erstellen Sie eine benutzerdefinierte View Engine und verfügen Sie über eine Methode, die ein ViewEngineResult zurückgibt. In diesem Beispiel überschreiben Sie einfach das
_options.ViewLocationFormats
und fügen Ihr Ordnerverzeichnis hinzu:Beispiel: https://github.com/AspNetMonsters/pugzor
quelle
Versuchen Sie es mit
RenderAction("myPartial","Account");
quelle