В чем преимущество установки псевдонима для метода действия с использованием атрибута «ActionName»? Я действительно не вижу в этом особой пользы, предоставляя пользователю возможность вызывать метод действия с другим именем. После указания псевдонима пользователь может вызывать метод действия только с использованием псевдонима. Но если это необходимо, то почему пользователь не меняет имя метода действия, а не указывает для него псевдоним?
Я был бы очень признателен, если бы кто-нибудь мог предоставить мне пример использования «ActionName» в сценарии, в котором он может принести большую пользу или лучше всего использовать.
asp.net-mvc
asp.net-mvc-3
Хасан Фахим
источник
источник
Ответы:
Он позволяет вам начинать действие с числа или включать в идентификатор любой символ, который не допускается .net.- Наиболее частая причина в том, что это позволяет вам иметь два Действия с одной и той же подписью (см. Действия GET / POST Delete для любого контроллера с шаблоном)
Например: вы можете разрешить тире в имени действия URL
http://example.com/products/create-product
vshttp://example.com/products/createproduct
илиhttp://example.com/products/create_product
.public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View(); } }
источник
Controller
, например View или File.Action
View()
вас возникнут проблемы, потому что все ссылки наView()
в вашем текущем контроллере будут разрешать это,Action
а не базовый метод. Итак, чтобы обойти это, вы должны использоватьActionName
атрибут, разрешающийView
действие, но внутри вы бы назвали егоPublicView
или что-то подобное.return View("CreateProduct")
иначе .NET будет ворчать, что не нашел представления, такого какcreate-product.aspx
илиcreate-product.cshtml
- По крайней мере, мой код работает так.Это также полезно, если у вас есть два действия с одинаковой подписью, которые должны иметь одинаковый URL-адрес.
Простой пример:
public ActionResult SomeAction() { ... } [ActionName("SomeAction")] [HttpPost] public ActionResult SomeActionPost() { ... }
источник
Я использую его, когда пользователь загружает отчет, чтобы он мог легко открыть свой CSV-файл прямо в Excel.
[ActionName("GetCSV.csv")] public ActionResult GetCSV(){ string csv = CreateCSV(); return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" }; }
источник
Попробуйте этот код:
public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View("CreateProduct"); } }
источник
Этот класс представляет атрибут, который используется для имени действия. Это также позволяет разработчикам использовать имя действия, отличное от имени метода.
источник
Это также полезно, когда вам нужно реализовать перегрузку метода.
public ActionResult ActorView() { return View(actorsList); } [ActionName("ActorViewOverload")] public ActionResult ActorView(int id) { return RedirectToAction("ActorView","Home"); } `
Здесь один ActorView не принимает параметров, а другой принимает int. Первый метод используется для просмотра списка актеров, а второй - для отображения того же списка актеров после удаления элемента с идентификатором «id». Вы можете использовать имя действия как «ActorViewOverload» везде, где вам нужна перегрузка метода.
источник