如何通过mvc中的路由匹配正确的操作方法?

时间:2014-10-06 19:23:10

标签: asp.net-mvc asp.net-mvc-4 routing routes asp.net-mvc-routing

我很困惑,我没能正确地标题这个问题。 这是我的问题。以下是我申请中的路线。

//"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 默认来生成视图上的链接。我有两个问题: -

  1. 不会将入站网址与相应的操作方法进行匹配。 每个请求都由第一个路由ListByAuthor处理。 例如,当我点击代码时,地址栏会显示正确的网址格式,即domain/list/tag,但通过调试,我发现tag值已分配给author } argument。
  2. 点击其他链接时,环境值会一直挂在网址上。因此,其他链接制动下来并开始咬我。例如,当我点击作者链接时,标记链接变为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
    
  3. 但它的工作原理是在路由中明确提供默认值是很多工作。 Plz建议我一些答案。我正在努力与路线。支持我赢得这场战争;)。提前谢谢

1 个答案:

答案 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 })