2009-12-17 10 views
6

La domanda attuale di 'indice' azione sul controller tipo ContactController è ambigua tra i seguenti metodi di azione:L'azione del controller è ambigua tra l'azione della classe di base con lo stesso nome.

System.Web.Mvc.ActionResult Index() on type RX.Web.Controllers.ContactController 
System.Web.Mvc.ActionResult Index() on type RX.Web.Controllers.CustomControllerBase2[[RX.Core.Model.Contact, RXTechJob.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 

Il controllore di contatto:

 public virtual new ActionResult Index() 
    { 
     return base.Index(); 
    } 

La base Controller:

 public virtual ActionResult Index() 
    { 

     return View("Index", SelectAll()); 

    } 

Perché questo succede? Come sistemarlo? Grazie!

risposta

5

Si sta creando un secondo metodo chiamato indice che MVC non sa come gestire. vedere here per una discussione su virtual new creando un metodo aggiuntivo non sovrascritto.

Invece per il controller contatto considerare qualcosa lungo la linea del:

public override ActionResult Index() { 
     return base.Index(); 
} 
0

Grazie per la risposta.

Perché StackOverflow non ha riconosciuto il mio Gooogle OpenID, così ho creare un nuovo account e tornare di nuovo :)

non posso usare "override", perché sto usando T4MVC.

Così posso risolvere il problema in questo modo:

controller di base (al posto di "pubblico" con "protetto"): Regolatore

 protected virtual ActionResult Index() 
    { 

     return View("Index", SelectAll()); 

    } 

contatto:

 public virtual new ActionResult Index() 
    { 
     return base.Index(); 
    } 

In auto T4MVC generato codice può essere annullato:

 public override System.Web.Mvc.ActionResult Index() { 
     var callInfo = new T4MVC_ActionResult(Area, Name, Actions.Index); 
     return callInfo; 
    } 

Apparentemente tutto funziona correttamente ora. :)

Problemi correlati