ASP.NET маршрутизация MVC не работает
моя маршрутизация работает неправильно. У меня определены следующие маршруты:
routes.MapRoute(
name: "CategoryDetails",
url: "{seoName}",
defaults: new { controller = "Category", action = "Details" }
);
routes.MapRoute(
name: "ContactUs",
url: "contact",
defaults: new { controller = "Home", action = "Contact" }
);
routes.MapRoute(
name: "AboutUs",
url: "about",
defaults: new { controller = "Home", action = "About" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
когда я нажимаю на ссылки о нас или свяжитесь с нами, то это приводит меня к методу действия деталей в контроллере категории.
это разметка для моего о нас и свяжитесь с нами ссылки:
@Html.ActionLink("About", "About", "Home")
@Html.ActionLink("Contact", "Contact", "Home")
мои данные метод действия для контроллера категории:
public ActionResult Details(string seoName)
{
CategoryViewModel model = categoryTask.Details(seoName);
return View(model);
}
что не так с моей конфигурации трассы?
4 ответов
переупорядочить маршруты от наиболее конкретных до менее конкретных. Таким образом, маршруты для контакта и около будут приходить до маршрута seoName:
routes.MapRoute(
name: "ContactUs",
url: "contact",
defaults: new { controller = "Home", action = "Contact" }
);
routes.MapRoute(
name: "AboutUs",
url: "about",
defaults: new { controller = "Home", action = "About" }
);
routes.MapRoute(
name: "CategoryDetails",
url: "{seoName}",
defaults: new { controller = "Category", action = "Details" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
С вашим первоначальным заказом, urls~/contact
и ~/about
всегда будет обрабатываться маршрутом seoName. Переупорядочивая их, вы убедитесь, что они обрабатываются правильными действиями в HomeController
и маршрут seoName будет соответствовать только url-адресу после того, как контакт и о маршрутах не совпали.
сначала определяется маршрут CategoryDetails. Вот почему он соответствует, например, url"http://server/AboutUs
"(seoName будет присвоено "AboutUs"). Сначала должны быть определены наиболее конкретные маршруты (AboutUs, ContactUs).
следующее вызывает проблему для вас. пожалуйста, прокомментируйте его или поместите внизу.
routes.MapRoute(
name: "CategoryDetails",
url: "{seoName}",
defaults: new { controller = "Category", action = "Details" }
);
Initally Defualt маршрут работает, и вы принимаете HomeControllers Indeax действие.
при нажатии на любую ссылку. двигатели маршрутизации соответствуют первому. берутся значения по умолчанию, указанные в определении маршрута.
попробуйте добавить следующую строку в controller и view . чтобы вы поняли, как и куда вы идете неправильно!--4-->
public ActionResult Details(string seoName)
{
ViewBag.ValueReceived = seoName;
return View();
}
и
<h1>@ViewBag.ValueReceived</h1>
при нажатии контакта или детали url будет напоминать
http://arunkumar.com:62115/about
здесь " о " рассматривается как значение для seoName, и выбрана неправильная маршрутизация