Quel est l'avantage de définir un alias pour une méthode d'action à l'aide de l'attribut "ActionName"? Je ne vois vraiment pas grand avantage à cela, en offrant à l'utilisateur la possibilité d'appeler une méthode d'action avec un autre nom. Après avoir spécifié l'alias, l'utilisateur peut appeler la méthode d'action uniquement en utilisant l'alias. Mais si cela est nécessaire, pourquoi l'utilisateur ne change-t-il pas le nom de la méthode d'action plutôt que de lui spécifier un alias?
J'apprécierais vraiment si quelqu'un peut me donner un exemple de l'utilisation de "ActionName" dans un scénario où il peut fournir un grand avantage ou il est préférable de l'utiliser.
asp.net-mvc
asp.net-mvc-3
Hasan Fahim
la source
la source
Réponses:
Il vous permet de démarrer votre action avec un nombre ou d'inclure tout caractère que .net n'autorise pas dans un identifiant. - La raison la plus courante est que cela vous permet d'avoir deux actions avec la même signature (voir les actions GET / POST Delete de tout contrôleur échafaudé)
Par exemple: vous pouvez autoriser les tirets dans le nom de votre action d'URL
http://example.com/products/create-product
vshttp://example.com/products/createproduct
ouhttp://example.com/products/create_product
.public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View(); } }
la source
Controller
, comme View ou File.Action
View()
vous auriez des problèmes car toutes les références àView()
dans votre contrôleur actuel résoudraient à celaAction
plutôt qu'à la méthode de base sous-jacente. Donc, pour contourner cela, vous utiliseriez l'ActionName
attribut pour permettre l'View
action, mais en interne, vous l'appeleriezPublicView
ou quelque chose de similaire.return View("CreateProduct")
ou .NET ne manquera pas de trouver une vue telle quecreate-product.aspx
oucreate-product.cshtml
- Au moins mon code fonctionne comme ça.C'est également utile si vous avez deux actions avec la même signature qui devraient avoir la même URL.
Un exemple simple:
public ActionResult SomeAction() { ... } [ActionName("SomeAction")] [HttpPost] public ActionResult SomeActionPost() { ... }
la source
Je l'utilise lorsque l'utilisateur télécharge un rapport afin qu'il puisse ouvrir facilement son fichier csv directement dans Excel.
[ActionName("GetCSV.csv")] public ActionResult GetCSV(){ string csv = CreateCSV(); return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" }; }
la source
Essayez ce code:
public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View("CreateProduct"); } }
la source
Cette classe représente un attribut utilisé pour le nom d'une action. Il permet également aux développeurs d'utiliser un nom d'action différent du nom de la méthode.
la source
Il est également utile lorsque vous devez implémenter une surcharge de méthode.
public ActionResult ActorView() { return View(actorsList); } [ActionName("ActorViewOverload")] public ActionResult ActorView(int id) { return RedirectToAction("ActorView","Home"); } `
Ici, un ActorView n'accepte aucun paramètre et l'autre accepte int. La première méthode utilisée pour afficher la liste des acteurs et l'autre est utilisée pour afficher la même liste d'acteurs après la suppression d'un élément avec un ID comme «id». Vous pouvez utiliser le nom de l'action comme «ActorViewOverload» chaque fois que vous avez besoin d'une surcharge de méthode.
la source