c # mvc 3, перегрузка действия? - PullRequest
9 голосов
/ 16 августа 2011

Я пытался перегрузить мой метод индекса.

Вот мои методы индекса:

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

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

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

Это продолжает приводить:

Текущий запрос на действие 'Индекс по типу контроллера «CoreController» неоднозначен между следующими методами действия: System.Web.Mvc.ActionResult IndexDefault () для типа ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEvent (System.String) для типа ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEventAndLanguage (System.String, System.String) для типа ManageMvc.Controllers.CoreController

Не возможно перегрузить действие индекса тремя разными методами GET?

Кроме того, если это возможно, какой будет правильный маршрут?У меня есть это:

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

URL будет выглядеть следующим образом:

localhost / Core / Index

localhost / event_name / Core / Index

localhost/ event_name / язык / Основной / Индекс

1 Ответ

13 голосов
/ 16 августа 2011

Подобная перегрузка не сработает.

Лучше всего использовать значения по умолчанию, а затем сделать значения маршрута необязательными (как они у вас уже есть):

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

Я не уверен, что вы получите маршрут, который будет выглядеть так, как вы хотите, с одним определением маршрута.Возможно, вам придется определить три различных маршрута и сопоставить каждый из них с вашим единственным методом Action.

...