Я переписываю вопрос, так как ответы пока что показывают мне, что я недостаточно хорошо его определил.Я оставлю исходный вопрос для справки ниже.
При настройке маршрутизации вы можете указать значения по умолчанию для различных частей URL / маршрута.Рассмотрим пример, который мастер VS генерирует:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "DefaultPage", action = "Index", id = UrlParameter.Optional } // Parameter defaults
В этом примере, если контроллер не указан, будет использоваться DefaultPageController, а если действие не указано, будет использовано действие «Индекс».URL обычно выглядят так: http://mysite/MyController/MyAction
.
Если в Url нет действия, подобного этому: http://mysite/MyController
, тогда будет использовано действие индекса.
Теперь давайте предположим, что у меня есть двадействия в моем контроллере Index и AnotherAction.Соответствующие им URL-адреса http://mysite/MyController
и http://mysite/MyController/AnotherAction
соответственно.Мое действие «Индекс» принимает параметр, идентификатор.Поэтому, если мне нужно передать параметр в действие Index, я могу сделать это: http://mysite/MyController/Index/123
.Обратите внимание, что в отличие от URL http://mysite/MyController
, я должен явно указать действие Index.Что я хочу сделать, так это уметь передавать http://mysite/MyController/123
вместо http://mysite/MyController/Index/123
.Мне не нужен индекс в этом URL. Я хочу, чтобы механизм mvc распознал, что когда я запрашиваю http://mysite/MyController/123
, 123 - это не действие (потому что я не определил действие с этим именем), а параметр длямое действие по умолчанию "Индекс".Как мне настроить маршрутизацию для достижения этой цели?
Ниже приведена оригинальная формулировка вопроса.
У меня есть контроллер с двумя методами, определенными так:
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(SomeFormData data)
{
return View();
}
Это позволяет мне обрабатывать URL как http://website/Page
как при переходе пользователя к этому URL (GET), так и при последующей отправке обратно формы (POST).
Теперь, когда я обрабатываю сообщение обратноВ некоторых случаях я хочу перенаправить браузер на этот URL:
http://website/Page/123
Где 123 - это целое число, и мне нужен метод для обработки этого URL в моем контроллере.
Как сделатьЯ настроил маршрутизацию, так что это работает?В настоящее время у меня есть маршрутизация «по умолчанию», сгенерированная мастером, как это:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "DefaultPage", action = "Index", id = UrlParameter.Optional } // Parameter defaults
Я попытался добавить другой метод контроллера, как это:
public ActionResult Index(int id)
{
return View();
}
Но это не работает как неоднозначное действиегенерируется исключение:
Текущий запрос на действие «Индекс» для типа контроллера «PageController» неоднозначен между следующими методами действия: System.Web.Mvc.ActionResult Index () для типа PageController System.Индекс Web.Mvc.ActionResult (Int32) для типа PageController
Я должен добавить, что у меня также есть другие действия в этом контроллере. Это сработало бы, если бы я этого не сделал.