我希望能够使用不符合{controller} / {action} / {id}格式的URL映射路由。映射看起来像:
routes.CreateArea("Root", "MyApp.Web.Controllers",
routes.MapRoute("Category-List", "Category/{category}",
new { controller = "Category", action = "List" }),
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" })
);
我的CategoryController
有一个动作List(string category)
。
我希望能够在我的观点中使用它:
<%= Html.ActionLink<CategoryController>(
c => c.List(category.UrlFriendlyName),
category.Name)%>
(为了便于阅读而增加了换行符)
所有这些产生的链接都是href=""
。从“Root”区域删除路由会产生正确的结果。是否可以将这种类型的映射与通用ActionLink帮助器一起使用,或者我是否必须使用RouteLink或类似的硬编码值?
我也试过以下但没有成功:
<%= Html.ActionLink(category.Name, "List", "Category",
new { category = category.UrlFriendlyName }) %>
答案 0 :(得分:1)
不理想,但您可以使用路线名称方法吗?
<%= Html.RouteLink("your link", "Category-List", new {category = "foo"})%>
答案 1 :(得分:0)
通过视线,你所写的内容对于生成你想要的URL是正确的。您是否尝试过使用非强类型Html.ActionLink
方法查看是否有效?
答案 2 :(得分:0)
我在ActionLink的调用中没有看到任何会导致路由系统实现使用哪条路由的内容。相反,我建议使用Html。 RouteLink,允许您按名称指定路径。这将确保匹配正确的路线。
更新:你在做跨区域链接吗? (换句话说,您链接的区域是否与包含链接的区域不同?)如果是,则必须在调用ActionLink / RouteLink时指定区域。如果没有,RouteLink是否有效?
我不认为这是造成问题的原因,但我注意到你的Category-List路由没有约束,我认为它应该被限制在Category控制器中。