Atrybut ChildActionOnly

Czasami w kilku widokach chcemy wyświetlić taką samą lub podobną treść. Jednym z rozwiązań jest po prostu wyrenderowanie tej samej akcji, tzn.:

@{
    ViewBag.Title = "About";
}

<h2>About</h2>

Glowna tresc

@Html.Action("CommonPart")

Metoda Action wywoła daną akcje i następnie wstawi wyrenderowaną treść. Implementacja CommonPart wygląda następująco:

[ChildActionOnly]
public ActionResult CommonPart()
{
  return View((object)"Hello World");
}

Po co nam atrybut ChildActionOnly? Bez niego efekt końcowy byłby taki sam. Dobrą praktyką jednak jest zaznaczeniem nim akcji, która generuje wyłącznie część dokumentu (np. treść) a nie cały plik HTML. Zabezpiecza to również przed bezpośrednim wywołaniem CommonPart. Próba wywołania akcji przez przeglądarkę zakończy się następującym wyjątkiem:

The action 'CommonPart' is accessible only by a child request. 

Podsumowując, jeśli wykorzystujemy jakąś akcję do wygenerowania wyłącznie fragmentu dokumentu, warto rozważyć wspomniany atrybut ponieważ ułatwia to czytanie kodu oraz zapobiega wygenerowaniu częściowego dokumentu przez przeglądarkę, co często jest niepożądane.

Leave a Reply

Your email address will not be published.