Jak mogę renderować widok częściowy (kontrola użytkownika) z innego folderu? W wersji zapoznawczej 3 wywoływałem RenderUserControl z pełną ścieżką, ale przy aktualizacji do wersji 5 nie jest to już możliwe. Zamiast tego mamy metodę RenderPartial, ale nie oferuje mi ona funkcji, której szukam.
c#
asp.net-mvc
renderpartial
Boris Callens
źródło
źródło
FindPartialView
metodę z czymś takimif(partialViewName.Contains"/")partialViewName="~/Views/"+partialViewName;
W moim przypadku korzystałem z MvcMailer (https://github.com/smsohan/MvcMailer) i chciałem uzyskać dostęp do częściowego widoku z innego folderu, który nie był w folderze „Shared”. Powyższe rozwiązania nie działały, ale działało przy użyciu ścieżki względnej.
źródło
Jeśli często używasz tej innej ścieżki, możesz to naprawić na stałe, bez konieczności ciągłego określania ścieżki. Domyślnie sprawdza częściowe widoki w folderze Widok i folderze współdzielonym. Ale powiedz, że chcesz go dodać.
Dodaj klasę do folderu Modele:
Następnie w pliku Global.asax.cs dodaj następujący wiersz:
źródło
Dla kontrolki użytkownika o nazwie myPartial.ascx znajdującej się w folderze Views / Account napisz:
źródło
Stworzyłem obejście, które wydaje się działać całkiem dobrze. Znalazłem potrzebę przejścia do kontekstu innego kontrolera w celu wyszukiwania nazw akcji, wyszukiwania itp. Aby to zaimplementować, stworzyłem nową metodę rozszerzenia dla
HtmlHelper
:ControllerContextRegion
jest zdefiniowany jako:Sposób użycia tego w widoku jest następujący:
Mogą występować niepożądane skutki uboczne, jeśli Twój kod wymaga, aby
controller
składnik trasy nie zmieniał się, ale do tej pory w naszym kodzie nie wydaje się, aby to podejście było negatywne.źródło
VirtualPathProviderViewEngine, na którym oparty jest WebFormsViewEngine, powinien obsługiwać znaki „~” i „/” z przodu ścieżki, więc powyższe przykłady powinny działać.
Zauważyłem, że twoje przykłady wykorzystują ścieżkę „~ / Account / myPartial.ascx”, ale wspomniałeś, że twoja kontrola użytkownika znajduje się w folderze Views / Account. Czy próbowałeś
czy to tylko literówka w twoim pytaniu?
źródło
W przypadku czytelników korzystających z programu ASP.NET Core 2.1 lub nowszego i chcących skorzystać ze składni częściowego tagu Helper spróbuj:
Tylda (~) jest opcjonalna.
Pomocne są również informacje na https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-3.1#partial-tag-helper .
źródło
powinieneś tego spróbować
umieść
~/Views/
przed swoim kodemźródło
Utwórz niestandardowy silnik widoku i zastosuj metodę, która zwraca ViewEngineResult W tym przykładzie po prostu nadpisujesz
_options.ViewLocationFormats
i dodajesz katalog folderów:Przykład: https://github.com/AspNetMonsters/pugzor
źródło
Spróbuj użyć
RenderAction("myPartial","Account");
źródło