3

我想在我的第一个 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

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

localhost:18118/Calculator/Add/Hallo - 消息只是“Welt”,但“Hallo”在哪里?

localhost:18118/Calculator/Add/Hallo/7 - 错误 404 ?为什么 ?

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

4

2 回答 2

1

问题是由以下事实引起的,当您调用时,您的两条路线“数学”和“默认”定义了不同的命名参数:

本地主机:18118/计算器/添加/你好

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

  • 控制器 = 计算器
  • 动作 = 添加
  • id = 你好

但是您的Action 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,...使其工作。

注意:重命名是建议使其正常工作,而不是说这是最好的方法......

于 2013-01-19T12:03:37.343 回答
0

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

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

于 2013-01-19T01:07:51.363 回答