我想在我的第一个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?为什么?
我希望你能帮助/教我。谢谢你的时间!
答案 0 :(得分:1)
问题是由于您的两条路线“数学”和“默认”定义了不同的命名参数 当你打电话:
localhost:18118 / Calculator / Add / 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 = ""
。