Quand voulez-vous utiliser l'attribut ChildActionOnly
? Qu'est ce qu'un ChildAction
et dans ce cas, vous souhaitez restreindre une action à l'aide de cet attribut?
Réponses
Trop de publicités?L' ChildActionOnly
attribut permet à l'action de la méthode peut être appelée uniquement comme un enfant de la méthode
dans une vue. Une méthode d'action n'a pas besoin d'avoir cet attribut pour être utilisé comme un enfant d'action, mais
nous avons tendance à utiliser cet attribut pour prévenir les méthodes d'action de l'être invoquée comme un résultat d'un utilisateur
demande.
Après avoir défini une méthode d'action, nous avons besoin de créer ce qui sera affiché lorsque l'action est
invoquée. Enfant des actions sont habituellement associés avec vue partielle sur, mais ce n'est pas obligatoire.
Avec [ChildActionOnly] attribut annoté, une méthode d'action ne peut être appelé qu'en tant qu'enfant de la méthode à partir de l'intérieur d'un point de vue. Voici un exemple pour [ChildActionOnly]..
il existe deux méthodes d'action: Index() et MyDateTime (la) et correspondant Vues: Index.cshtml et MyDateTime.cshtml.
c'est HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "This is from Index()";
var model = DateTime.Now;
return View(model);
}
[ChildActionOnly]
public PartialViewResult MyDateTime()
{
ViewBag.Message = "This is from MyDateTime()";
var model = DateTime.Now;
return PartialView(model);
}
}
Ici est le point de vue de l'Indice.cshtml.
@model DateTime
@{
ViewBag.Title = "Index";
}
<h2>
Index</h2>
<div>
This is the index view for Home : @Model.ToLongTimeString()
</div>
<div>
@Html.Action("MyDateTime") // Calling the partial view: MyDateTime().
</div>
<div>
@ViewBag.Message
</div>
Voici MyDateTime.cshtml vue partielle.
@model DateTime
<p>
This is the child action result: @Model.ToLongTimeString()
<br />
@ViewBag.Message
</p>
si vous exécutez l'application et de faire cette demande http://localhost:57803/home/mydatetime (numéro de port est spécifique à ma VS, vous pouvez obtenir différents de port). le résultat sera d'Erreur du Serveur comme ceci:
Cela signifie que vous ne pouvez pas appeler directement la vue partielle. mais elle peut être appelée via l'Index() de la vue comme dans l'Index.cshtml
@Html.Action("MyDateTime") // Appel de la vue partielle: MyDateTime().
Si vous supprimez [ChildActionOnly] et de faire la même demande http://localhost:57803/home/mydatetime il vous permet d'obtenir le mydatetime vue partielle résultat:
This is the child action result. 12:53:31 PM
This is from MyDateTime()
Vous pouvez l'utiliser si vous utilisez RenderAction
de vos points de vue, généralement de rendre une vue partielle.
La raison pour marquage avec [ChildActionOnly]
, c'est que vous avez besoin de la méthode de contrôleur à être public, de sorte que vous pouvez l'appeler avec RenderAction
mais vous ne voulez pas que quelqu'un puisse accéder à une URL (par exemple: /Contrôleur/SomeChildAction) et de voir les résultats de cette action directement.