Atrybut [ChildActionOnly] w ASP MVC
Wczoraj opisywałem atrybut [NonAction]. Do manipulowania dostępnością akcji przez URL można się też posłużyć atrybutem [ChildActionOnly]. Jego działanie jest mniej restrykcyjne, ponieważ dopuszcza on wywołanie takiej akcji, ale tylko przy użyciu helpera RenderAction. Na początek prosta demonstracja, przykładowego, bardzo prostego kontrolera:
public class HomeController : Controller { //[ChildActionOnly] public ActionResult DayInfo() { string dayInfo = "Child Action Only Demo"; return PartialView("DayInfo", dayInfo); } }
Widok częściowy „DayInfo” to:
@model string @Model
Jak się można domyślić wywołanie w przeglądarce akcji „DayInfo” da następujący efekt:
Jednak wywoływanie przez URL częściowych widoków, może nie być zachowaniem oczekiwanym przez programistę. Po od komentowaniu atrybutu [ChildActionOnly] tracimy możliwość wywoływania akcji „DayInfo” przez URL:
Następny przykład pokazuje jak wywołać „DayInfo” za pomocą helpera RenderAction. Pierwszym krokiem będzie rozbudowa kontrolera z pierwszego przykładu:
public class HomeController : Controller { [ChildActionOnly] public ActionResult DayInfo() { string dayInfo = "Child Action Only Demo"; return PartialView("DayInfo", dayInfo); } public ActionResult Index() { return View(); } }
Następnie modyfikacja widoku „Index”:
@{ ViewBag.Title = "Child Action Only Demo"; }
Index
@{ Html.RenderAction("DayInfo"); }
Efektem wywołania akcji Index jest:
Czyli to czego oczekiwaliśmy. Jeżeli zamiast helpera RenderAction użyjemy RenderPartial to tekst „Child Action Only Demo” nie zostanie wyświetlony.