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:

child action

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:

child only after

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:

child action2

Czyli to czego oczekiwaliśmy. Jeżeli zamiast helpera RenderAction użyjemy RenderPartial to tekst „Child Action Only Demo” nie zostanie wyświetlony.

Share Button

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Time limit is exhausted. Please reload the CAPTCHA.