Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przez Steve Smith, Maher JENDOUBI, Rick Anderson i Scott Sauber
Widok częściowy to Razor plik znaczników (.cshtml) bez @page dyrektywy, renderujący dane wyjściowe HTML w renderowanych danych wyjściowych innego pliku znaczników.
Termin widok częściowy jest używany podczas tworzenia aplikacji MVC, gdzie pliki znaczników są nazywane widokami lub aplikacją Razor Pages, gdzie pliki znaczników są nazywane stronami. W tym artykule ogólnie odwołuje się do widoków MVC i stron Razor jako plików znaczników.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Kiedy używać widoków częściowych
Skuteczny sposób na wykorzystanie widoków częściowych to:
Podziel duże pliki znaczników na mniejsze składniki.
W dużym, złożonym pliku znaczników składającym się z kilku elementów logicznych istnieje zaleta pracy z każdym elementem odizolowanym do widoku częściowego. Kod w pliku znaczników można zarządzać, ponieważ znacznik zawiera tylko ogólną strukturę strony i odwołania do widoków częściowych.
Zmniejsz duplikację wspólnej zawartości znaczników w plikach znaczników.
Gdy te same elementy znaczników są używane w różnych plikach, widok częściowy pozwala na zredukowanie duplikacji treści znaczników, umieszczając ją w jednym wspólnym pliku widoku częściowego. Gdy znaczniki są zmieniane w widoku częściowym, aktualizuje renderowane dane wyjściowe plików znaczników korzystających z widoku częściowego.
Widoki częściowe nie powinny być używane do utrzymywania typowych elementów układu. Wspólne elementy układu należy określić w plikach _Layout.cshtml .
Nie używaj widoku częściowego tam, gdzie do renderowania wymagana jest złożona logika lub wykonywanie kodu. Zamiast widoku częściowego użyj składnika widoku.
Zadeklaruj widoki częściowe
Widok częściowy to .cshtml plik znaczników bez @page dyrektywy utrzymywany w folderze Views (MVC) lub Pages (Razor Pages).
W ASP.NET Core MVC kontroler ViewResult może zwrócić widok lub widok częściowy. W Razor Stronach, obiekt PageModel może zwrócić częściowy widok reprezentowany jako obiekt PartialViewResult. Odwołania i renderowanie widoków częściowych opisano w sekcji Odwołanie do widoku częściowego.
W przeciwieństwie do widoku MVC lub renderowania strony, widok częściowy nie uruchamia polecenia _ViewStart.cshtml. Aby uzyskać więcej informacji na temat _ViewStart.cshtml, zobacz Layout in ASP.NET Core.
Nazwy plików widoku częściowego często zaczynają się od podkreślenia (_). Ta konwencja nazewnictwa nie jest wymagana, ale pomaga wizualnie odróżnić widoki częściowe od widoków i stron.
Częściowy widok to plik znaczników przechowywany .cshtml w folderze Views.
Kontroler ViewResult może zwrócić widok lub widok częściowy. Odwołania i renderowanie widoków częściowych opisano w Odwołanie do widoku częściowego.
W przeciwieństwie do renderowania widoku MVC, częściowy widok nie uruchamia _ViewStart.cshtml. Aby uzyskać więcej informacji na temat _ViewStart.cshtml, zobacz Layout in ASP.NET Core (Układ w programie ASP.NET Core).
Nazwy plików widoku częściowego często zaczynają się od podkreślenia (_). Ta konwencja nazewnictwa nie jest wymagana, ale pomaga wizualnie odróżnić widoki częściowe od pełnych.
Odwołanie do częściowego widoku
Używanie widoku częściowego w Razor PageModel
W ASP.NET Core 2.0 lub 2.1 następująca metoda obsługi renderuje widok częściowy _AuthorPartialRP.cshtml na odpowiedź:
public IActionResult OnGetPartial() =>
new PartialViewResult
{
ViewName = "_AuthorPartialRP",
ViewData = ViewData,
};
W ASP.NET Core 2.2 lub nowszym metoda obsługi może alternatywnie wywołać Partial metodę w celu utworzenia PartialViewResult obiektu:
public IActionResult OnGetPartial() =>
Partial("_AuthorPartialRP");
Używanie widoku częściowego w pliku znaczników
W pliku znaczników istnieje kilka sposobów odwołowania się do widoku częściowego. Zalecamy, aby aplikacje używały jednego z następujących metod asynchronicznego renderowania:
W pliku znaczników istnieją dwa sposoby odwołowania się do widoku częściowego:
Zalecamy, aby aplikacje korzystały z asynchronicznego pomocnika HTML.
Pomocnik tagów częściowych
Pomocnik tagów częściowych wymaga ASP.NET Core 2.1 lub nowszej wersji.
Pomocnik tagów częściowych renderuje zawartość asynchronicznie i używa składni podobnej do kodu HTML:
<partial name="_PartialName" />
Gdy rozszerzenie pliku jest obecne, Pomocnik tagów odwołuje się do widoku częściowego, który musi znajdować się w tym samym folderze co plik znaczników wywołujący widok częściowy:
<partial name="_PartialName.cshtml" />
Poniższy przykład odnosi się do widoku częściowego z katalogu głównego aplikacji. Ścieżki rozpoczynające się od tyldy-ukośnika (~/) lub ukośnika (/) odwołują się do katalogu głównego aplikacji:
Razor Stron
<partial name="~/Pages/Folder/_PartialName.cshtml" />
<partial name="/Pages/Folder/_PartialName.cshtml" />
MVC
<partial name="~/Views/Folder/_PartialName.cshtml" />
<partial name="/Views/Folder/_PartialName.cshtml" />
Poniższy przykład odwołuje się do widoku częściowego ze ścieżką względną:
<partial name="../Account/_PartialName.cshtml" />
Aby uzyskać więcej informacji, zobacz Pomocnik tagów częściowych w ASP.NET Core.
Asynchroniczny pomocnik HTML
W przypadku korzystania z pomocnika HTML najlepszym rozwiązaniem jest użycie metody PartialAsync. Typ IHtmlContent zwracany przez PartialAsync jest opakowany w Task<TResult>. Metoda jest przywoływana przez poprzedzanie oczekiwanego wywołania znakiem @ :
@await Html.PartialAsync("_PartialName")
Gdy rozszerzenie pliku jest obecne, Pomocnik HTML odwołuje się do widoku częściowego, który musi znajdować się w tym samym folderze co plik znaczników wywołujący widok częściowy:
@await Html.PartialAsync("_PartialName.cshtml")
Poniższy przykład odwołuje się do widoku częściowego z katalogu głównego aplikacji. Ścieżki rozpoczynające się od tyldy z ukośnikiem (~/) lub samego ukośnika (/) odwołują się do katalogu głównego aplikacji:
Razor Stron
@await Html.PartialAsync("~/Pages/Folder/_PartialName.cshtml")
@await Html.PartialAsync("/Pages/Folder/_PartialName.cshtml")
MVC
@await Html.PartialAsync("~/Views/Folder/_PartialName.cshtml")
@await Html.PartialAsync("/Views/Folder/_PartialName.cshtml")
Poniższy przykład odwołuje się do widoku częściowego ze ścieżką względną:
@await Html.PartialAsync("../Account/_LoginPartial.cshtml")
Alternatywnie można renderować widok częściowy za pomocą polecenia RenderPartialAsync. Ta metoda nie zwraca elementu IHtmlContent. Przesyła strumieniowo renderowane dane wyjściowe bezpośrednio do odpowiedzi. Ponieważ metoda nie zwraca wyniku, musi być wywoływana w Razor bloku kodu:
@{
await Html.RenderPartialAsync("_AuthorPartial");
}
Ponieważ RenderPartialAsync strumień renderowanej zawartości zapewnia lepszą wydajność w niektórych scenariuszach. W sytuacjach krytycznych dla wydajności należy porównać stronę przy użyciu obu metod i użyć podejścia, które generuje szybszą odpowiedź.
Synchroniczny pomocnik HTML
Partial i RenderPartial są odpowiednio synchronicznymi odpowiednikami PartialAsync i RenderPartialAsync. Synchroniczne odpowiedniki nie są zalecane, ponieważ istnieją scenariusze, w których zakleszczają. Metody synchroniczne są przeznaczone do usunięcia w przyszłej wersji.
Important
Jeśli musisz wykonać kod, użyj komponentu widoku zamiast widoku częściowego.
Wywoływanie Partial lub RenderPartial powoduje wyświetlenie ostrzeżenia analizatora programu Visual Studio. Na przykład obecność Partial zwraca następujący komunikat ostrzegawczy:
Użycie metody IHtmlHelper.Partial może spowodować zakleszczenia aplikacji. Rozważ użycie <częściowego> pomocnika tagów lub IHtmlHelper.PartialAsync.
Zastąp wywołania do @Html.Partial wywołaniami do @await Html.PartialAsync lub Partial Tag Helper. Aby uzyskać więcej informacji na temat migracji Partial Tag Helper, zobacz Migrowanie z pomocnika HTML.
Odkrywanie częściowego widoku
Gdy widok częściowy jest przywoływany według nazwy bez rozszerzenia pliku, następujące lokalizacje przeszukuje się w podanej kolejności:
Razor Stron
- Obecnie wykonywanie folderu strony
- Wykres katalogu nad folderem strony
/Shared/Pages/Shared/Views/Shared
MVC
/Areas/<Area-Name>/Views/<Controller-Name>/Areas/<Area-Name>/Views/Shared/Views/Shared/Pages/Shared
/Areas/<Area-Name>/Views/<Controller-Name>/Areas/<Area-Name>/Views/Shared/Views/Shared
Następujące konwencje mają zastosowanie do odnajdywania widoku częściowego:
- Różne widoki częściowe o tej samej nazwie pliku są dozwolone, gdy widoki częściowe znajdują się w różnych folderach.
- W przypadku odwoływania się do widoku częściowego po nazwie, bez rozszerzenia pliku, i gdy widok częściowy jest obecny zarówno w folderze wywołującego, jak i w folderze Udostępnionym, widok częściowy z folderu wywołującego jest używany. Jeśli widok częściowy nie znajduje się w folderze obiektu wywołującego, widok częściowy jest udostępniany z folderu Udostępnione . Widoki częściowe w folderze Udostępnione są nazywane widokami częściowymi lub widokami domyślnymi.
- Widoki częściowe mogą być połączone — widok częściowy może wywołać inny widok częściowy, jeśli nie stworzy cyklicznego odwołania. Ścieżki względne odnoszą się zawsze do bieżącego pliku, a nie do katalogu głównego lub nadrzędnego pliku.
Note
Element Razorsection zdefiniowany w widoku częściowym jest niewidoczny dla plików znaczników nadrzędnych. Element section jest widoczny tylko dla widoku częściowego, w którym jest zdefiniowany.
Uzyskiwanie dostępu do danych z widoków częściowych
W momencie tworzenia wystąpienia częściowego widoku, otrzymuje ono kopię słownika nadrzędnegoViewData. Aktualizacje wprowadzone w danych w widoku częściowym nie są utrwalane w widoku nadrzędnym.
ViewData zmiany w widoku częściowym zostaną utracone, gdy widok częściowy powróci.
W poniższym przykładzie pokazano, jak przekazać wystąpienie ViewDataDictionary do widoku częściowego (partial view):
@await Html.PartialAsync("_PartialName", customViewData)
Model można przekazać do widoku częściowego. Model może być obiektem niestandardowym. Można przekazać model z PartialAsync (renderuje blok zawartości dla obiektu wywołującego) lub RenderPartialAsync (strumieniuje zawartość do wyjścia):
@await Html.PartialAsync("_PartialName", model)
Razor Stron
Znacznik znajdujący się na stronie przykładowej aplikacji to: Pages/ArticlesRP/ReadRP.cshtml. Strona zawiera dwa częściowe widoki. Drugi widok częściowy przechodzi w modelu i ViewData do widoku częściowego. Przeciążenie konstruktora ViewDataDictionary służy do przekazywania nowego ViewData słownika przy zachowaniu istniejącego ViewData słownika.
@model ReadRPModel
<h2>@Model.Article.Title</h2>
@* Pass the author's name to Pages\Shared\_AuthorPartialRP.cshtml *@
@await Html.PartialAsync("../Shared/_AuthorPartialRP", Model.Article.AuthorName)
@Model.Article.PublicationDate
@* Loop over the Sections and pass in a section and additional ViewData to
the strongly typed Pages\ArticlesRP\_ArticleSectionRP.cshtml partial view. *@
@{
var index = 0;
foreach (var section in Model.Article.Sections)
{
await Html.PartialAsync("_ArticleSectionRP",
section,
new ViewDataDictionary(ViewData)
{
{ "index", index }
});
index++;
}
}
Pages/Shared/_AuthorPartialRP.cshtml to pierwszy widok częściowy, do który odwołuje się ReadRP.cshtml plik znaczników:
@model string
<div>
<h3>@Model</h3>
This partial view from /Pages/Shared/_AuthorPartialRP.cshtml.
</div>
Pages/ArticlesRP/_ArticleSectionRP.cshtml to drugi widok częściowy, do który odwołuje się ReadRP.cshtml plik znaczników:
@using PartialViewsSample.ViewModels
@model ArticleSection
<h3>@Model.Title Index: @ViewData["index"]</h3>
<div>
@Model.Content
</div>
MVC
Poniższy kod znaczników pokazuje widok Views/Articles/Read.cshtml w przykładowej aplikacji. Widok zawiera dwa widoki częściowe. Drugi widok częściowy przechodzi w modelu i ViewData do widoku częściowego. Przeciążenie konstruktora ViewDataDictionary służy do przekazywania nowego ViewData słownika przy zachowaniu istniejącego ViewData słownika.
@model PartialViewsSample.ViewModels.Article
<h2>@Model.Title</h2>
@* Pass the author's name to Views\Shared\_AuthorPartial.cshtml *@
@await Html.PartialAsync("_AuthorPartial", Model.AuthorName)
@Model.PublicationDate
@* Loop over the Sections and pass in a section and additional ViewData to
the strongly typed Views\Articles\_ArticleSection.cshtml partial view. *@
@{
var index = 0;
foreach (var section in Model.Sections)
{
@(await Html.PartialAsync("_ArticleSection",
section,
new ViewDataDictionary(ViewData)
{
{ "index", index }
}))
index++;
}
}
Views/Shared/_AuthorPartial.cshtml to pierwszy widok częściowy, do który odwołuje się Read.cshtml plik znaczników:
@model string
<div>
<h3>@Model</h3>
This partial view from /Views/Shared/_AuthorPartial.cshtml.
</div>
Views/Articles/_ArticleSection.cshtml to drugi widok częściowy, do który odwołuje się Read.cshtml plik znaczników:
@using PartialViewsSample.ViewModels
@model ArticleSection
<h3>@Model.Title Index: @ViewData["index"]</h3>
<div>
@Model.Content
</div>
Podczas wykonywania partiale są renderowane do wynikowych danych renderowania pliku znaczników nadrzędnych, które samo jest renderowane w ramach udostępnionego _Layout.cshtml. Pierwszy widok częściowy renderuje nazwę i datę publikacji autora artykułu:
Abraham Lincoln
Ten widok częściowy ze <ścieżki udostępnionego widoku częściowego>. 11/19/1863 12:00:00 AM
Drugi widok częściowy renderuje sekcje artykułu:
Indeks Sekcji Pierwszej: 0
Osiemdziesiąt siedem lat temu ...
Sekcja Druga, Indeks: 1
Teraz jesteśmy zaangażowani w wielką wojnę domową, która wystawia na próbę ...
Indeks sekcji trzy: 2
Ale, w szerszym sensie, nie możemy poświęcić ...