2

我正在更改一个 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!
    }

当我调用时,即使参数在 URL 中MyActionB,最终参数也会作为nullmyParameterB进入控制器- (例如:/MyController/MyActionB/aThing/aName/123/456)。

确实希望最后一个参数(在上面的示例中为“456”)是可选的。

MyActionA工作正常。

任何建议,将不胜感激!此外,是否有关于如何routes.MapRoute工作的良好参考?谢谢!

4

2 回答 2

0

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

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

于 2012-12-05T16:26:35.633 回答
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 } );

看看这是否有效。

于 2012-12-05T16:28:28.420 回答