Дочерние действия
62ASP.NET --- ASP.NET MVC 5 --- Дочерние действия
Дочерние действия - это методы действий, вызываемые внутри представления. Они позволяют избежать повторения логики контроллера, которую нужно использовать во многих местах приложения. Дочерние действия соотносятся с действиями таким же образом, как частичные представления с представлениями. Дочернее действие может понадобиться, когда необходимо отображать определенный управляемый данными виджет (графический элемент), который должен располагаться на многих страницах и содержать данные, не зависящие от главного действия.
В примере приложения GameStore такой подход применялся для помещения на каждую страницу навигационного меню, управляемого данными, без необходимости в получении навигационных данных непосредственно из каждого метода действия. Навигационные данные получаются независимо дочерним действием.
Создание дочернего действия
Любое действие может использоваться как дочернее. Для демонстрации средства дочерних действий в контроллер Home добавлен новый метод действия, показанный в примере ниже:
using System;
using System.Web.Mvc;
namespace WorkingWithRazor.Controllers
{
public class HomeController : Controller
{
// ...
[ChildActionOnly]
public ActionResult Time()
{
return PartialView(DateTime.Now);
}
}
}
Метод действия называется Time() и визуализирует частичное представление путем вызова метода PartialView(). Атрибут ChildActionOnly гарантирует, что метод действия может быть вызван только как дочерний метод в рамках представления. Метод действия не обязан иметь этот атрибут, чтобы использоваться в качестве дочернего действия, но предпочтительнее применять его, чтобы воспрепятствовать вызову таких методов действий в виде результата пользовательского запроса.
Имея определенный метод действия, необходимо создать частичное представление, которое будет визуализировано при вызове действия. Дочерние действия, как правило, ассоциируются с частичными представлениями, хотя обязательным это не является. В примере ниже показано представление /Views/Home/Time.cshtml, созданное в целях демонстрации. Это строго типизированное частичное представление, моделью представления которого является объект DateTime:
@model DateTime
<p>Сейчас: @Model.ToShortTimeString()</p>
Визуализация дочернего действия
Дочерние действия вызываются с применением вспомогательного метода Html.Action(). С его помощью выполняется метод действия, обрабатывается ViewResult и вывод внедряется в ответ, предназначенный для клиента. В примере ниже приведены изменения, внесенные в файл /Views/Common/List.cshtml с целью визуализации дочернего действия:
@{
ViewBag.Title = "List";
Layout = null;
}
<em>Это файл представления <b>~/Views/Common/List.cshtml</b></em>
<br /><br />
@Html.Partial("MyPartial")
@Html.Partial("MyStronglyTypedPartial",
new List<string> { "Яблоко", "Апельсин", "Груша" })
@Html.Action("Time")
Чтобы просмотреть результаты визуализации дочернего действия, необходимо запустить приложение и снова перейти на URL вида /Home/List:
При вызове вспомогательного метода Action() в примере выше предоставляется одиночный параметр, который указывает имя вызываемого метода действия. Это приводит к тому, что MVC Framework ищет метод действия в контроллере, обрабатывающем текущий запрос. Для вызова методов действий из других контроллеров понадобится указать имя контроллера, например:
@Html.Action("Time", "SomeController")
Передавать параметры методам действий можно путем предоставления объекта анонимного типа, свойства которого соответствуют именам параметров дочернего метода действия. Таким образом, например, если есть следующее дочернее действие:
[ChildActionOnly] public ActionResult Time(DateTime time) { return PartialView(time); }
то его можно вызвать из представления так, как показано ниже:
@Html.Action("Time", new { time = DateTime.Now })