¿Cuál es el beneficio de establecer un alias para un método de acción utilizando el atributo "ActionName"? Realmente no veo mucho beneficio en brindarle al usuario la opción de llamar a un método de acción con algún otro nombre. Después de especificar el alias, el usuario puede llamar al método de acción solo usando el alias. Pero si eso es necesario, ¿por qué el usuario no cambia el nombre del método de acción en lugar de especificar un alias para él?
Realmente agradecería si alguien me pudiera proporcionar un ejemplo del uso de "ActionName" en un escenario en el que puede proporcionar un gran beneficio o es mejor usarlo.
asp.net-mvc
asp.net-mvc-3
Hasan Fahim
fuente
fuente
Respuestas:
Te permite comenzar tu acción con un número o incluir cualquier carácter que .net no permita en un identificador. - La razón más común es que le permite tener dos acciones con la misma firma (consulte las acciones GET / POST Delete de cualquier controlador con scaffolded)
Por ejemplo: podría permitir guiones dentro del nombre de la acción de su URL
http://example.com/products/create-product
frente ahttp://example.com/products/createproduct
ohttp://example.com/products/create_product
.public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View(); } }
fuente
Controller
, como Ver o Archivo.Action
View()
entonces tendría problemas porque todas las referencias aView()
en su controlador actual se resolverían a eso enAction
lugar del método base subyacente. Entonces, para evitar esto, usaría elActionName
atributo para permitir laView
acción, pero internamente lo llamaríaPublicView
o algo similar.return View("CreateProduct")
o .NET se molestará por no encontrar una vista comocreate-product.aspx
ocreate-product.cshtml
- Al menos mi código funciona así.También es útil si tiene dos acciones con la misma firma que deberían tener la misma URL.
Un simple ejemplo:
public ActionResult SomeAction() { ... } [ActionName("SomeAction")] [HttpPost] public ActionResult SomeActionPost() { ... }
fuente
Lo uso cuando el usuario descarga un informe para que pueda abrir su archivo csv directamente en Excel fácilmente.
[ActionName("GetCSV.csv")] public ActionResult GetCSV(){ string csv = CreateCSV(); return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" }; }
fuente
Prueba este código:
public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View("CreateProduct"); } }
fuente
Esta clase representa un atributo que se usa para el nombre de una acción. También permite a los desarrolladores usar un nombre de acción diferente al nombre del método.
fuente
También es útil cuando necesita implementar la sobrecarga de métodos.
public ActionResult ActorView() { return View(actorsList); } [ActionName("ActorViewOverload")] public ActionResult ActorView(int id) { return RedirectToAction("ActorView","Home"); } `
Aquí un ActorView no acepta parámetros y el otro acepta int. El primer método utilizado para ver la lista de actores y el otro se utiliza para mostrar la misma lista de actores después de eliminar un elemento con ID como 'id'. Puede usar el nombre de la acción como 'ActorViewOverload' siempre que necesite una sobrecarga de métodos.
fuente