Jaka jest korzyść z ustawienia aliasu dla metody akcji za pomocą atrybutu „ActionName”? Naprawdę nie widzę wiele korzyści z tego, że daje użytkownikowi możliwość wywołania metody akcji o innej nazwie. Po określeniu aliasu, użytkownik może wywołać metodę akcji tylko przy użyciu aliasu. Ale jeśli jest to wymagane, to dlaczego użytkownik nie zmienia nazwy metody akcji zamiast określić jej alias?
Byłbym naprawdę wdzięczny, gdyby ktoś mógł podać mi przykład użycia „ActionName” w scenariuszu, w którym może przynieść duże korzyści lub jest najlepszy w użyciu.
asp.net-mvc
asp.net-mvc-3
Hasan Fahim
źródło
źródło
Odpowiedzi:
Pozwala na rozpoczęcie akcji liczbą lub zawarcie w identyfikatorze dowolnego znaku, na który .net nie pozwala. - Najczęstszym powodem jest to, że pozwala mieć dwie akcje z tym samym podpisem (zobacz akcje GET / POST Delete dowolnego kontrolera szkieletowego)
Na przykład: możesz zezwolić na myślniki w nazwie działania adresu URL w
http://example.com/products/create-product
porównaniu zhttp://example.com/products/createproduct
lubhttp://example.com/products/create_product
.public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View(); } }
źródło
Controller
, takich jak Widok lub Plik.Action
View()
, miałbyś problemy, ponieważ wszystkie odwołania doView()
w twoim obecnym kontrolerze rozwiązałyby sięAction
raczej z tym , niż z podstawową metodą. Aby to obejść, użyłbyśActionName
atrybutu, aby zezwolić naView
akcję, ale wewnętrznie nazwałbyś toPublicView
lub coś podobnego.return View("CreateProduct")
lub .NET będzie zrzędzić, że nie znajdziesz widoku, takiego jakcreate-product.aspx
lubcreate-product.cshtml
- Przynajmniej mój kod działa w ten sposób.Jest to również przydatne, jeśli masz dwie akcje z tym samym podpisem, które powinny mieć ten sam adres URL.
Prosty przykład:
public ActionResult SomeAction() { ... } [ActionName("SomeAction")] [HttpPost] public ActionResult SomeActionPost() { ... }
źródło
Używam go, gdy użytkownik pobiera raport, aby mógł łatwo otworzyć plik csv bezpośrednio w programie Excel.
[ActionName("GetCSV.csv")] public ActionResult GetCSV(){ string csv = CreateCSV(); return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" }; }
źródło
Wypróbuj ten kod:
public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View("CreateProduct"); } }
źródło
Ta klasa reprezentuje atrybut używany w nazwie akcji. Pozwala również programistom na użycie innej nazwy akcji niż nazwa metody.
źródło
Jest to również pomocne, gdy trzeba zaimplementować przeciążanie metod.
public ActionResult ActorView() { return View(actorsList); } [ActionName("ActorViewOverload")] public ActionResult ActorView(int id) { return RedirectToAction("ActorView","Home"); } `
Tutaj jeden ActorView nie akceptuje żadnych parametrów, a drugi akceptuje int. Pierwsza metoda służy do przeglądania listy aktorów, a druga służy do wyświetlania tej samej listy aktorów po usunięciu elementu o identyfikatorze „id”. Możesz użyć nazwy akcji jako „ActorViewOverload” wszędzie tam, gdzie potrzebujesz przeciążenia metody.
źródło