Я пытаюсь построить маршрут в формате {controller} {action} {классификация ID} {reviewID} {CategoryID} \
, но я хочу иметь возможность обратиться к нему без окончательного CategoryID иустановите значение по умолчанию равным 1, если оно не задано.
Вот мои маршруты:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"SchoolRouteNoCategory", // Route name
"{controller}/{action}/{ClassificationID}/{ReviewID}/", // URL with parameters
new { controller = "School", action = "Edit", ClassificationID = "SBP", ReviewID = "SAR" } // Parameter defaults
);
routes.MapRoute(
"SchoolRoute", // Route name
"{controller}/{action}/{SchoolID}/{ReviewID}/{CategoryID}/", // URL with parameters
new RouteValueDictionary { { "action", "index" }, { "SchoolID", UrlParameter.Optional }, { "ReviewID", UrlParameter.Optional }, { "CategoryID", UrlParameter.Optional } } // Parameter defaults
);
и вот мои подписи контроллера для действия редактирования:
public ActionResult Edit(string SchoolID, string ReviewID) {}
public ActionResult Edit(string SchoolID, string ReviewID, int CategoryID) {}
Первое действие редактирования просто добавит CategoryID по умолчанию и перенаправит его во второе действие редактирования.
Моя проблема заключается в том, что когда я пытаюсь создать ActionLink в своем представлении индекса, я получаю следующий URL:
http://localhost:21271/School/Edit?ClassificationID=SBP&ReviewID=SAR
где, как и должно быть,
http://localhost:21271/School/Edit/SBP/SAR/
Код для ActionLink:
<%: Html.ActionLink("Edit", "Edit", new { item.ClassificationID, item.ReviewID}) %>
У меня появляется ощущение, что я знаю еще меньшео маршрутизации, чем я думал, но большинство уроков, которые я могу найти, фокусируются только на очень простых маршрутах и не затрагивают ничего сложного.Существуют ли какие-либо учебные пособия, посвященные тому типу маршрутизации, который я пытаюсь сделать?
РЕДАКТИРОВАТЬ:
У меня возникла новая проблема с маршрутизацией, подумал, что я попытаюсь опубликовать ее здесьсначала вместо создания новой темы.
На моей странице редактирования есть следующая ссылка ActionLink:
<%: Html.ActionLink(Model.Categories[i].name, "Edit", new { AcadPeriod = Model.AcadPeriod, ClassificationID=Model.ClassificationID, ReviewID=Model.ReviewID, CategoryID=Model.Categories[i].category_id })%>
, которая приводит к следующему URL:
http://localhost:21271/School/Edit?ClassificationID=SBP&ReviewID=SAR&CategoryID=2
ЕслиЯ запускаю отладчик маршрута и получаю следующий вывод.
Matched Route: {controller}/{action}/{AcadPeriod}/{id}
Generated URL: /School/Edit/1011/SBP/SAR/2 using the route "{controller}/{action}/{AcadPeriod}/{ClassificationID}/{ReviewID}/{CategoryID}"
Однако в таблице маршрутов говорится, что {controller} / {action} / {AcadPeriod} / {ClassificationID} / {ReviewID}/ {CategoryID} не совпадает?
Кажется, на одной странице мне говорят две разные вещи.
Это мои маршруты в global.asax в их текущем состоянии:
routes.MapRoute(
"SchoolRoute1",
"{controller}/{action}/{AcadPeriod}/{ClassificationID}/{ReviewID}/{CategoryID}",
new { controller = "School", action = "Edit", AcadPeriod = "1011", CategoryID = "1" }
);
routes.MapRoute(
"SchoolRouteNoCategory",
"{controller}/{action}/{AcadPeriod}/{ClassificationID}/{ReviewID}",
new { controller = "School", action = "Edit", AcadPeriod = "1011", CategoryID = "1" }
);
routes.MapRoute(
"SchoolRoute",
"{controller}/{action}/{ClassificationID}/{ReviewID}/{CategoryID}",
new { controller = "School", action = "Edit", CategoryID = "1" }
);
routes.MapRoute(
"SchoolIndex", // Route name
"{controller}/{action}/{AcadPeriod}/{id}", // URL with parameters
new { controller = "School", action = "Index", AcadPeriod = "1011", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"SchoolIndex1", // Route name
"{controller}/{action}/{AcadPeriod}", // URL with parameters
new { controller = "School", action = "Index", AcadPeriod = "1011" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Есть идеи?