в моем приложении Asp.net MVC2 я зарегистрировал следующие маршруты в global.asax.cs:
routes.MapRoute(
"Search",
"Search/{action}/{category}/{query}/{page}",
new { controller = "Search", action = "Results", category = "All", page = 1 },
new { page = @"\d{1,8}" }
);
// URL: /Search
routes.MapRoute(
"SearchDefault",
"Search",
new { controller = "Search", action="Index" }
);
routes.MapRoute(
"Product",
"Product/{action}/{productcode}",
new { controller = "Product", action = "Details" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Search", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
У меня есть свой SearchController:
public ActionResult Results(string category, string query, int page)
{
}
У меня есть мой ProductController:
public ActionResult Details(string productcode)
{
return View();
}
В моем представлении Results.aspx существуют следующие ссылки ActionLink:
<% foreach (var cat in Model.Categories) { %>
<li><%= Html.ActionLink(cat.Name, "Results", "Search", new { category= cat.Name, query = Model.SearchText, page=1 }, null)%></li>
<% } %>
</ul>
<hr />
<table>
<% foreach (var p in Model.Products) { %>
<tr>
<td>
<%= Html.ActionLink(p.ProductName, "Details", "Product", new { product = p.ProductCode }, new { })%><br />
</td>
</tr>
<% } %>
Первая ссылка действия отображается следующим образом:
"http://localhost/Search/Results?category=Test%20Category%20A&query=test%20product&page=1"
тогда как второй ActionLink правильно отображает:
"http://localhost/Product/Details/1234ABC020848"
Странно то, что оба работают правильно, и даже если я наберу вручную:
"http://localhost/Search/Results/Test%20Category%20A/test%20product/1"
тогда мой SearchController корректно выполняется. Я действительно предпочел бы иметь более чистый URL, представленный моим ActionLink. Что я пропустил?
Заранее спасибо.