2011-08-16 18 views
9

Próbowałem przeciążać moją metodę indeksu.C# mvc 3, przeciążanie akcji?

Oto moje metody index:

[ActionName("Index")] 
public ActionResult IndexDefault() 
{ 
} 

[ActionName("Index")] 
public ActionResult IndexWithEvent(string eventName) 
{ 
} 

[ActionName("Index")] 
public ActionResult IndexWithEventAndLanguage(string eventName, string language) 
{ 
} 

Dzięki temu rzucania:

Obecny wniosek o 'wskaźnik' działanie na typ kontrolera CoreController 'jest niejednoznaczna między następujące metody działania: System. Web.Mvc.ActionResult IndexDefault() na typ ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEvent (System.String) na typ ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEventAndLanguage (System.String, System. String) na typ ManageMvc.Controllers.CoreController

Czy nie można przeładować akcji indeksu za pomocą 3 różnych metod GET?

Ponadto, jeśli to możliwe, jaka byłaby właściwa trasa? Mam to:

routes.MapRoute(
       "IndexRoute", // Route name 
       "{eventName}/{language}/Core/{action}", // URL with parameters 
       new { controller = "Core", action = "Index", eventName = UrlParameter.Optional, language = UrlParameter.Optional } 
); 

URL będzie wyglądać następująco:

localhost/core/Index

localhost/EVENT_NAME/core/Index

localhost/EVENT_NAME/język/core/Index

Odpowiedz

13

Przeładowanie w ten sposób nie zadziała.

Najlepszym rozwiązaniem jest użycie wartości domyślnych, a następnie wyodrębnienie wartości trasy opcjonalne (jak już masz je):

public ActionResult Index(string eventName = null, string language = null) 
{ 
} 

Nie jestem pewien, masz zamiar dostać trasę wyglądać sposób, w jaki chcesz, z jedną definicją trasy. Prawdopodobnie będziesz musiał zdefiniować trzy różne trasy i odwzorować każdą z powrotem do swojej metody pojedynczego działania.

+0

Dlaczego ta przeciążenie nie działa? – Patrick

+3

@Patrick - Ponieważ ASP.NET MVC nie może zdecydować, które z twoich przeciążeń ma być używane w oparciu o sposób, w jaki zdefiniowałeś trasę (nie jest wystarczająco inteligentny, aby wywoływać różne przeciążenia w oparciu o parametry przekazywane w adresie URL). –

+0

Ahh ok, dziękuję. Zmieniłem go tak, jak zasugerowałeś i działa. – Patrick