ASP.NET MVC C#routes.MapRoute无效

时间:2012-12-05 15:52:46

标签: c# asp.net-mvc

我正在改变ASP.NET,MVC和C#应用程序,但routes.MapRoute条目未按预期工作。在我的Global.asax.cs文件中,我有以下两条路线 -

routes.MapRoute(
            "MyRoute1", // Route name
            "{controller}/{action}/{something}/{name}/{id}/{myParameterA}", 
            new { controller = "MyController", action = "MyActionA", category = "something", name = "name", id = "id", myParameterA = "myParameterA" });


routes.MapRoute(
            "MyRoute2", // Route name
            "{controller}/{action}/{something}/{name}/{id}/{myParameterB}", 
            new { controller = "MyController", action = "MyActionB", category = "something", name = "name", id = "id", myParameterB = UrlParameter.Optional } );

我的控制器中的代码如下所示 -

    public ActionResult MyActionA(string something, string name, string id, string myParameterA)
    {
       //do cool stuff!
    }

    public ActionResult MyActionB(string something, string name, string id, string myParameterB)
    {
       //do awesome stuff!
    }

当我致电MyActionB时,即使参数位于网址中,最终参数myParameterB也会作为 null 进入控制器 - (例如:/ MyController / MyActionB / aThing / aName / 123/456)。

希望最终参数(上例中的'456')是可选的。

MyActionA工作正常。

任何建议将不胜感激! 另外,有关routes.MapRoute如何运作的好参考吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

不确定,但我认为交换两者,当你在第一个上设置“myParameterA =”myParameterA“”时,你传递/ MyController / MyActionB / aThing / aName / 123/456时指定一个默认值url映射到第一个,但是数字456与默认字符串值不兼容 - 因此传递为null。

编辑:哦,为了一个很好的参考,Apress Pro MVC 3有一个很好的章节--Safari Informit。

答案 1 :(得分:0)

这是因为一旦用路径本身的字符串替换参数,就没有什么可以区分这两条路线。如果向路径添加静态部件,则应该能够区分它们。

routes.MapRoute(
        "MyRoute1", // Route name
        "{controller}/{action}/{something}/{name}/{id}/firstroute/{myParameterA}", 
        new { controller = "MyController", action = "MyActionA", category = "something", name = "name", id = "id", myParameterA = "myParameterA" });


routes.MapRoute(
        "MyRoute2", // Route name
        "{controller}/{action}/{something}/{name}/{id}/secondroute/{myParameterB}", 
        new { controller = "MyController", action = "MyActionB", category = "something", name = "name", id = "id", myParameterB = UrlParameter.Optional } );

看看是否有效。