2011-06-30 11 views
67

Qual è il vantaggio di impostare un alias per un metodo di azione utilizzando l'attributo "NomeAzione"? Davvero non ne vedo molti vantaggi, nel fornire all'utente la possibilità di chiamare un metodo di azione con un altro nome. Dopo aver specificato l'alias, l'utente è in grado di chiamare il metodo di azione solo utilizzando l'alias. Ma se è necessario, perché l'utente non cambia il nome del metodo di azione piuttosto che specificare un alias per esso?Scopo dell'azione Nome

Apprezzerei molto se qualcuno mi può fornire un esempio dell'uso di "ActionName" in uno scenario in cui può fornire grandi vantaggi o è meglio utilizzarlo.

+0

Il motivo più comune è quando si hanno entrambi i metodi GET e POST e la firma è la stessa. vedi @Carlos Muñoz answer – RickAndMSFT

risposta

109

Consente di avviare l'azione con un numero o includere qualsiasi carattere che .net non consente in un identificatore. - Il motivo più comune è che permette di avere due azioni con la stessa firma (si veda la GET/POST eliminare le azioni di qualsiasi controller ponteggi)

Per esempio: si potrebbe permettere trattini all'interno del vostro URL nome dell'azione http://example.com/products/create-product vs http://example.com/products/createproduct o http://example.com/products/create_product.

+40

Permette anche di usare nomi di azioni che potrebbero essere metodi su 'Controller', come Visualizza o File. – gram

+0

@gram, non possiamo chiamare un metodo normale su un controller senza specificare un alias? Penso che possiamo –

+2

Se si volesse assegnare un nome a 'Action'' View() ', si avranno problemi perché tutti i riferimenti a' View() 'nel controller corrente si risolverebbero in tale' Azione' anziché nel metodo di base sottostante. Quindi per ovviare a ciò usereste l'attributo 'ActionName' per consentire l'azione' View', ma internamente lo chiamereste 'PublicView' o qualcosa di simile. – Buildstarted

51

È anche utile se si hanno due azioni con la stessa firma che dovrebbero avere lo stesso url.

Un semplice esempio:

public ActionResult SomeAction() 
{ 
    ... 
} 

[ActionName("SomeAction")] 
[HttpPost] 
public ActionResult SomeActionPost() 
{ 
    ... 
} 
+0

Grazie a @Carlos Muñoz. Questo sembra essere un buon uso di esso. –

+0

Ha senso, ma in quali scenari utilizzi HttpPost senza parametri? So che ci sono possibili ragioni, come restituire JSON ed evitare problemi di sicurezza con GET. Mi sto solo chiedendo cosa sia il tuo. – regularmike

+1

L'elenco dei parametri non è la parte importante qui. Potrebbe esserci un esempio migliore, il punto è che puoi farlo se necessario. –

28

Io lo uso quando l'utente scarica un report in modo che possano aprire il file CSV direttamente in Excel facilmente.

[ActionName("GetCSV.csv")] 
public ActionResult GetCSV(){ 
    string csv = CreateCSV(); 
    return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" }; 
} 
+0

Questo è molto intelligente :) –

5

Gli attributi ActionName vengono utilizzati per esporre i metodi di azione .NET con nomi diversi nel mondo esterno. In circostanze sotto, è possibile fare uso di ActionName attributi:

  1. per SEO (Search Engine Optimization) si desidera esporre nome dell'azione più significativo nel tuo URL di azione .NET nome del metodo.

  2. Per evitare problemi di sovraccarico delle funzioni. Supponiamo di avere un nome del metodo di azione DELETE, i cui metodi di azione GET e POST accettano lo stesso parametro. In questo caso si otterrà un errore in fase di compilazione. Per risolvere il problema puoi rinominare il tuo metodo .NET e con l'attributo ActionName puoi ancora mantenere lo stesso nome esposto.

Per una spiegazione più dettagliata, visitare ActionName attribute in ASP.NET MVC

-1

E 'anche utile quando è necessario implementare overloading dei metodi.

public ActionResult ActorView() 
     { 

      return View(actorsList); 
     } 


     [ActionName("ActorViewOverload")] 
     public ActionResult ActorView(int id) 
     {    
      return RedirectToAction("ActorView","Home"); 
     } 
` 

Qui si ActorView accetta alcun parametro e l'altro accetta int. Il primo metodo utilizzato per visualizzare l'elenco degli attori e l'altro viene utilizzato per mostrare la stessa lista di attori dopo aver eliminato un elemento con ID come 'id'. È possibile utilizzare il nome dell'azione come "ActorViewOverload" ogni volta che è necessario sovraccaricare il metodo.

1

provare questo codice:

public class ProductsController 
{ 

    [ActionName("create-product")] 
    public ActionResult CreateProduct() 
    { 
     return View("CreateProduct"); 
    } 

} 
0

Questa classe rappresenta un attributo che viene utilizzato per il nome di un'azione.Consente inoltre agli sviluppatori di utilizzare un nome di azione diverso rispetto al nome del metodo.