Я работаю над веб-сайтом в asp.net mvc. У меня есть маршрут
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
который является маршрутом по умолчанию. И у меня есть метод
public ActionResult ErrorPage(int errorno)
{
return View();
}
Теперь, если я хочу выполнить этот код с http://something/mycontroller/Errorpage/1, он не работает. Но если я изменяю название параметра к идентификатору от errorno
работает.
Действительно ли обязательно иметь то же название параметра для этого метода? Или я должен создать отдельные маршруты для таких ситуаций?
Вариант 1
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
public ActionResult ErrorPage(int id)
{
return View();
}
Вариант 2
routes.MapRoute(
"Default",
"{controller}/{action}/{errorno}",
new { controller = "Home", action = "Index", errorno = UrlParameter.Optional }
);
public ActionResult ErrorPage(int errorno)
{
return View();
}
Вариант 3
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
public ActionResult ErrorPage(int id)
{
int errorno = id;
return View();
}
Вы можете либо переименовать параметр в корне по умолчанию (что, вероятно, не очень хорошая идея), либо переименовать его в методе действия. Добавление другого корня не поможет, потому что он будет таким же, как и корень по умолчанию, и с учетом URL-адреса механизм маршрутизации не может различить их и всегда будет выбирать первый в списке.
попробуйте использовать то же имя параметра в методе действия, что и в параметре url таблицы маршрутов.
global.asx
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
myController
public ActionResult ErrorPage(int id)
{
return View();
}