Надежда на некоторую справку после чтения в маршрутизацию MVC и не придумывающий ответ самостоятельно.
Мне зарегистрировали следующие маршруты:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
null,
"YourFeedback/Article/{resourceId}",
new { controller = "YourFeedback", action = "Index", contentTypeId = new Guid(ConfigurationManager.AppSettings["ArticleLibraryId"]) });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
У меня есть следующий ActionLink в представлении aspx:
<%=Html.ActionLink("Your Feedback", "Article", "YourFeedback", new
{
resourceId = Model.ContentId.ResourceId
}, new { @class = "yourFeedback" })%>
Мое понимание маршрутизации MVC - то, что это представило бы ссылку привязки с href "/YourFeedback/Article/101", куда 101 прибывает из Модели. ContentId. ResourceId.
Все же ссылка привязки href представляется как "YourFeedback/Article/resourceId=101".
Какие-либо идеи, где я иду не так, как надо?
Заранее спасибо.
Это потому, что ваша ссылка действия будет соответствовать второму маршруту, а не первому. Причина в том, что у вас есть странные значения по умолчанию в вашем первом маршруте. Вы установили контроллер на «YourFeedback», а действие - на «Index». Это означает, что вам также нужно будет установить это в своей ссылке действия, если вы хотите сопоставить этот маршрут.
Чтобы сопоставить маршрут, вам нужно будет использовать эту ссылку действия:
<%=Html.ActionLink("Your Feedback", "Index", "YourFeedback", new
{
resourceId = Model.ContentId.ResourceId
}, new { @class = "yourFeedback" })%>
Или изменить маршрут.