使用ActionLink时ASP.Net MVC出站路由匹配问题

时间:2010-06-16 09:48:52

标签: asp.net-mvc routing actionlink

希望在阅读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
            );
    }

我在aspx视图中有以下ActionLink:

<%=Html.ActionLink("Your Feedback", "Article", "YourFeedback", new
 {
     resourceId = Model.ContentId.ResourceId
 }, new { @class = "yourFeedback" })%>

我对MVC路由的理解是,这将呈现一个href为“/ YourFeedback / Article / 101”的锚链接,其中101来自Model.ContentId.ResourceId。

然而,锚链接href呈现为“YourFeedback / Article / resourceId = 101”。

我出错的任何想法?

提前致谢。

1 个答案:

答案 0 :(得分:2)

这是因为您的actionlink将匹配第二条路线而不是第一条路线。原因是您的第一条路线中有一些奇怪的默认值。您已将控制器设置为“YourFeedback”,并将操作设置为“索引”。这意味着如果你想匹配那条路线,你必须在你的actionlink中设置它。

要匹配路线,您必须使用此动作链接:

<%=Html.ActionLink("Your Feedback", "Index", "YourFeedback", new
{
    resourceId = Model.ContentId.ResourceId
}, new { @class = "yourFeedback" })%>

或改变路线。