2009-12-17 4 views
6

die aktuelle Anforderung Handlungs 'Index' auf ContactController Reglertyp ist zwischen den folgenden Aktionsmethoden mehrdeutig:Die Aktion des Controllers ist mehrdeutig zwischen der Aktion der Basisklasse mit demselben Namen.

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]] 

Der Kontakt Controller:

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

Die Basis Controller:

 public virtual ActionResult Index() 
    { 

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

    } 

Warum das passieren? Wie man es repariert? Vielen Dank!

Antwort

5

Sie erstellen eine zweite Methode, die als Index bezeichnet wird, mit der MVC nicht umgehen kann. Eine Diskussion über virtual new finden Sie unter here Erstellen einer zusätzlichen nicht überschreibenden Methode.

Statt für Ihren Kontakt Controller betrachtet etwas entlang der Linie:

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

Vielen Dank für Ihre Antwort.

Da Stackoverflow nicht meine Gooogle OpenID erkennen, so dass ich ein neues Konto und kommen wieder zurück :)

kann ich nicht verwenden „überschreiben“, weil ich T4MVC verwende.

Also ich reparieren es so:

Basis-Controller (ersetzen Sie "public" mit "geschützt"):

 protected virtual ActionResult Index() 
    { 

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

    } 

Kontakt Controller:

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

Im T4MVC automatisch generiert Code kann übersteuert werden:

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

Scheinbar funktioniert jetzt alles gut. :)

Verwandte Themen