asp.net MVC 4中的第二个MapRoute不适用于参数

时间:2013-01-19 01:00:55

标签: asp.net-mvc vb.net maproute

我想在我的第一个MVC 4项目中添加第二个MapRoute,我将此代码添加到 Global.asax.vb

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
    routes.MapRoute( _
        "Math", _
        "Calculator/{action}/{foo}/{intBar}", _
        New With {.controller = "Calculator", .action = "Add", .foo = ""} _
    )
    routes.MapRoute( _
        "Default", _
        "{controller}/{action}/{id}", _
        New With {.controller = "Default", .action = "Index", .id = ""} _
    )

这是我的控制器 /Controllers/CalculatorController.vb

   Function Add(         ByVal foo     As String, 
                Optional ByVal intBar? As Integer = 1) As ActionResult
        ViewData("Message") = foo & " Welt"
        Return View()

    End Function

现在我的问题,我做错了什么?

本地主机:18118 /计算器/添加/喂   - 消息只是“Welt”,但在哪里是“Hallo”?

本地主机:18118 /计算器/添加/喂/ 7   - 错误404?为什么?

我希望你能帮助/教我。谢谢你的时间!

2 个答案:

答案 0 :(得分:1)

问题是由于您的两条路线“数学”和“默认”定义了不同的命名参数 当你打电话:

localhost:18118 / Calculator / Add / Hallo

然后使用“默认”路由,命名参数为:

  • controller = calculator
  • action = Add
  • id = Hallo

但您的操作 Add需要名为foo的参数。我建议,将“数学”路线映射中的foo参数重命名为 id

 routes.MapRoute( _
        "Math", _
        "Calculator/{action}/{id}/{intBar}", _ ' foo renamed to id
        New With {.controller = "Calculator", .action = "Add", .id = ""} _
    )

并重命名Action参数:Function Add(ByVal id As String,...以使其正常工作。

注意:重命名是建议让它工作,而不是说这是最好的方法...

答案 1 :(得分:0)

我认为这是因为您使用defaults对象中的foo语句覆盖了URL中的.foo = "" param。你在你的路线中映射{foo},所以它接收你的'Hallo'字符串 - 但是你用空字符串替换它。

尝试从默认对象中取出.foo = ""