2012-09-22 12 views
6

Sto lavorando per fornire nomi descrittivi per i miei controller MVC 4 e voglio fare qualcosa come lo stile [ActionName="My-Friendly-Name"], ma per l'intero controller.C# MVC 4 Attributo ControllerName

Non sono riuscito a trovare alcuna informazione su tale attributo, quindi come farei per farlo? Inoltre, dovrò aggiungere un nuovo MapRoute per gestirlo?

EDIT:

Per esempio, mi piacerebbe passare il seguente URL:

http://mysite.com/my-reports/Details/5 

essere indirizzato al seguente controller:

[ControllerClass="my-reports"] // This attribute is made up. I'd like to know how to make this functionality 
public class ReportsController : Controller 
{ 
    // 
    // GET: /Reports/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ViewResult Details(int id) 
    { 
     Report report = db.Reports.Single(g => g.Id == id); 
     return View(report); 
    } 

    public ActionResult Create() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Create(Report item) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       item.Id = Guid.NewGuid(); 
       _context.Reports.AddObject(item); 
       _context.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(item); 
     } 
     catch (Exception) 
     { 
      return View(item); 
     } 
    } 

}

risposta

-1

I Non so se c'è una risposta alla tua domanda, ma anche se ce ne fosse una, perché nel mondo faresti così sottile g? Perché non fare un modo standard: chiama la classe controller tutto ciò che ti piace (a patto che abbia senso) e fagli chiamare dal framework per te? Perché creare due convenzioni di denominazione artificiali e mapparle tra di loro? Non vedo un singolo guadagno, ma molteplici cons. Come ad esempio - la sua più difficile da leggere, più difficile da mantenere, più difficile da capire, ma è anche insignificante, ma ancora, a dura prova le prestazioni ...

Aggiornamento

Si prega di guardare in questo intervento, penso hanno risolto il problema di cui stai parlando.

Si prega di farmi sapere se è stato di alcun aiuto a voi.

+0

Il motivo è perché alcuni di routing avviene in base ai valori memorizzati in un database (così invece di avere un URL essere '/ items/5' L'URL può essere qualcosa del tipo'/Media/Musica/Qualcuno-to-Love ') e questo ha causato alcune complicazioni particolari che il modo più semplice per risolvere sarebbe quello di consentire la stessa funzionalità di' [ActionName] 'ma per i controller. Se non c'è una soluzione, dovrò capire un altro modo. Sono sicuro che c'è, questo era solo il mio primo pensiero :) –

+1

Cool, capito, guarda l'aggiornamento nella mia risposta per favore. –

+0

Alcuni dei miei utenti preferiscono http://www.domain.com/produkter invece di http://www.domain.com/product. Non voglio avere un ProdukterController e mixare in svedese nel mio codice. L'ho risolto utilizzando AttributeRouting per creare percorsi personalizzati per tutti i miei controller e azioni. –

6

aggiungere un percorso personalizzato che abbinerà il vostro nome specifico:

routes.MapRoute(
    "MyCustomRoute", 
    "My-Friendly-Name/{action}/{id}", 
    new { controller = "ReportsController", action = "Index", id = "" } 
); 

Ora ogni URL che contiene "My-Friendly-Name" per il controller utilizzerà il nuovo percorso.

2

Checkout this post, in particolare dove si parla di Formattazione percorso.