【问题标题】:ASP.NET MVC 5 Attribute Routing: Url.Action returns null when using multiple parametersASP.NET MVC 5 属性路由:使用多个参数时 Url.Action 返回 null
【发布时间】:2017-03-17 13:59:10
【问题描述】:

以前在 SO (post 1, post 2, post 3) 上有人问过这类问题,但没有一个能帮助我。

我有以下路线(在LandingController 类中定义):

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

我试图在我的 Razor 模板中生成一个 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,这不是我想要的,但它表明我在调用时做错了以上。

【问题讨论】:

  • 您能否也说明一下您的 routeconfig 中路由是如何定义的?
  • 我的路由是使用属性路由定义的,即在操作方法上方(我已在问题中发布),因此它不在路由配置中。
  • 你能试试[Route("connections/{city:name}/map/{page?}]吗?
  • 还是不行。
  • @GlenLittle 我能够解决这个问题。我们使用特定于文化的 URL,具体取决于 CurrentCulture,结果发现该特定文化的路由信息​​没有在我们保存路由配置的数据库中设置,我不断收到nulls。基本上,从@Url.Action 获取 null 意味着您要查找的路由尚未配置且不存在。我当时不知道我们在数据库中保存了路由配置。

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5


【解决方案1】:
[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)]

【讨论】:

  • 感谢您的回答,但即使我删除了name 约束,我仍然得到null,我已经尝试过了...
  • 应该可以,但是我很好奇您的控制器中是否有类似的路由可能会导致冲突?
  • 不,我查过了。如果我调用我期望生成的 URL (connections/{city:name}/map1) 并运行调试器,则在操作实现中设置的断点被命中 - 所以绝对没有冲突。
  • 您能否确认您的@Url.Action("Connections", new { city = "madrid", page = 1 }) 实际上生成了正确的网址为route data 而不是querystrings?我感觉它正在生成http://localhost/landing/connections?city=madrid?page=1
  • @Url.Action("Connections", new { city = "madrid", page = 1 }) 总是返回null,这就是问题所在..
猜你喜欢
  • 2015-05-02
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2015-12-18
  • 2018-10-29
相关资源
最近更新 更多