2017-03-17 98 views
1

这样的问题已经在SO(post 1,post 2,post 3)之前被询问过,但他们都没有能够帮助我。ASP.NET MVC 5属性路由:当使用多个参数时,Url.Action返回空值

我有以下途径(一LandingController类中定义):

[HttpGet] 
[Route("connections/{city:name}/map{page?}", Order = 2)] 
public Task<ActionResult> Connections(string city, int page = 1) 

为此我试图生成我的剃刀模板像这样的URL:

@Url.Action("Connections", "Landing", new { city = "madrid", page = 1 }) 

@Url.Action("Connections", new { city = "madrid", page = 1 }) 

这两个调用返回null。任何人有一个想法为什么?

但是,如果我省略了路由模板(做[Route("connections/{city:name}/map", Order = 2)])中的页面参数,则会生成以下URL:/connections/madrid/map/?page=1,这不是我想要的,但它表明我在上述呼叫中做错了事。

+0

可以还表示行进路线是如何定义的在你的路由配置? –

+0

我的路由是使用属性路由定义的,即在action方法之上(我在问题中发布的),所以它不在路由配置中。 –

+0

您可以尝试'[路线(“连接/ {城市:名称} /地图/ {页面?}]'? – juunas

回答

0
[HttpGet] 
[Route("connections/{city:name}/map{page?}", Order = 2)] 
public Task<ActionResult> Connections(string city, int page = 1) 

很确定你的路由不正确,{city:name}叫什么名字?我不记得任何有约束类型的名称。

你的属性路由应该是如此简单:

[Route("connections/{city}/map/{page?}", Order = 2)] 

如果要约束添加到页面整数这将是:

[Route("connections/{city}/map/{page:int?}", Order = 2)] 
+0

谢谢你的回答,但即使我删除'name'约束,我仍然得到'null',我已经尝试过了... –

+0

应该工作,但是我很好奇你的控制器中是否有类似的路由那可能会导致冲突? – 12seconds

+0

不,我查过了。如果我调用我期望生成的URL('connections/{city:name}/map1')并运行调试器,那么操作实现中设置的断点就会被触发 - 所以绝对不会产生冲突。 –