我很困惑,我没能正确地标题这个问题。 这是我的问题。以下是我申请中的路线。
//"list/author" => list by author
routes.MapRoute("ListByAuthor",
"list/{author}",
new { controller = "MyCtrl", action = "MyAction" });
//"list/tag" => list by tag
routes.MapRoute("ListBytag",
"list/{tag}",
new { controller = "MyCtrl", action = "MyACtion" });
//default
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "MyCtrl", action = "MyAction", id = UrlParameter.Optional });
我通过提供 RouteName ,即 ListByAuthor , ListByTag 和默认来生成视图上的链接。我有两个问题: -
ListByAuthor
处理。 例如,当我点击代码时,地址栏会显示正确的网址格式,即domain/list/tag
,但通过调试,我发现tag
值已分配给author
} argument。 点击其他链接时,环境值会一直挂在网址上。因此,其他链接制动下来并开始咬我。例如,当我点击作者链接时,标记链接变为domain/list/tag?author
。网站上的解决方案之一建议在路由值中传递String.Empty
但它不起作用。但是,如果我按以下方式更改路线
//"list/author" => list by author
routes.MapRoute("ListByAuthor",
"list/{author}",
new { controller = "MyCtrl", action = "MyAction", tag = "" }); //providing empty value to tag parameter in route
但它的工作原理是在路由中明确提供默认值是很多工作。 Plz建议我一些答案。我正在努力与路线。支持我赢得这场战争;)。提前谢谢
答案 0 :(得分:0)
我不是专家,但我认为原因是因为你拥有的路线是相同的, 例子
yourdomain.com/list/authorxm,将匹配第一条路线
yourdomain.com/list/tagx也将匹配
因为{author}和{tag}只是参数
试试这个:
//"list/author" => list by author
routes.MapRoute("ListByAuthor",
"list/ByAuthor/{author}",
new { controller = "MyCtrl", action = "MyActionByAuthor" });
//"list/tag" => list by tag
routes.MapRoute("ListBytag",
"list/ByTag/{tag}",
new { controller = "MyCtrl", action = "MyACtionByTag" });
//default
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "MyCtrl", action = "MyAction", id = UrlParameter.Optional })