Asp.net mvc mvc3路由问题

Asp.net mvc mvc3路由问题,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,ActionLink结果“http://localhost:5089/Article/GetArticlesByCategory?category=ASP.NET&categoryId=2". 我想显示链接类型“http://localhost:5089/Blog/ASP.NET". 什么是错误的路线命名为“文章” 路线: routes.MapRoute( "Default", // Route name "{controller}/

ActionLink结果“http://localhost:5089/Article/GetArticlesByCategory?category=ASP.NET&categoryId=2". 我想显示链接类型“http://localhost:5089/Blog/ASP.NET". 什么是错误的路线命名为“文章”

路线:

routes.MapRoute(
                "Default", // Route name
               "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "index", id = UrlParameter.Optional } // Parameter defaults
            );

 routes.MapRoute(
                "Article",
                "Blog/{category}", // 
                new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional, categoryId = UrlParameter.Optional }
链接:

已解决

GetArticlesByCategory参数int categoryId更改为>>字符串类别,并将操作代码替换为新参数(字符串类别)

路线改为:

        routes.MapRoute(
            "Category",
            "Blog/{category}",
            new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional }
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "index", id = UrlParameter.Optional } // Parameter defaults
        );
@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article",
new { category = k.Name }, null)
ActionLink替换为:

        routes.MapRoute(
            "Category",
            "Blog/{category}",
            new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional }
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "index", id = UrlParameter.Optional } // Parameter defaults
        );
@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article",
new { category = k.Name }, null)

您没有在路由中指定操作

routes.MapRoute(
                "Article",
                "Blog/{action}/{category}/{categoryId}", // 
                new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional, categoryId = UrlParameter.Optional }

我建议你用Phil Haack的方法。如果希望链接显示为
http://localhost:5089/Blog/ASP.NET
,您需要将actionlink更改为:

@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article",
    new { category = k.Name }, new { @title = "Kategorisindeki Makaleler", @class = "selected" })
由于您不希望链接中包含CategoryID,因此无需将其放入。actionlink未匹配路由,因为它也需要CategoryID参数

编辑

如果希望从路由中读取CategoryID,则需要将其添加到路由中。否则,它将只是作为一个参数附加(如原始示例中所示)

如果您将路线更改为:

"Blog/{categoryId}/{category}"
or
"Blog/{category}/{categoryId}"

该链接现在看起来像
Blog/2/ASP.NET
Blog/ASP.NET/2
,但是如果您希望从URL读取类别ID,那么我认为您没有太多选择

存在一些问题。首先,也是最重要的一点,您的路线是按错误的顺序指定的。默认路由应在最后定义。第二,永远不要用两个可选参数定义路线。这只会造成太多问题

请尝试以下路线:

routes.MapRoute(
    "CategoryAndId",
    "Blog/{category}/{categoryId}", 
    new { controller = "Article", action = "GetArticlesByCategory" } 
);

routes.MapRoute(
    "CategoryOnly",
    "Blog/{category}", 
    new { controller = "Article", action = "GetArticlesByCategory",
        category = UrlParameter.Optional } 
);

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "index", 
        id = UrlParameter.Optional } // Parameter defaults
);

GetArticlesByCategory的categoryId参数此路由需要使用的控制器名称和操作是什么?controller=“Article”和action=“GetArticlesByCategory”