ASP.NET MVC映射URL与{controller} / {action}的区域不同

时间:2009-03-12 12:16:27

标签: asp.net-mvc routing

我希望能够使用不符合{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 }) %>

3 个答案:

答案 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控制器中。