Asp.net mvc mvc3路由问题
ActionLink结果“http://localhost:5089/Article/GetArticlesByCategory?category=ASP.NET&categoryId=2". 我想显示链接类型“http://localhost:5089/Blog/ASP.NET". 什么是错误的路线命名为“文章” 路线: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}/
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”