【问题标题】:MVC vNext Routing and ActionLinkMVC vNext 路由和 ActionLink
【发布时间】:2015-03-12 20:26:26
【问题描述】:

MVC 6 - 带有 Core 5.0 的 vNext

我在我的项目中使用了一条路线,如下所示:

routes.MapRoute(
    name: "Default",
    template: "{firstId}/{secondId}",
    defaults: new { controller = "Window", action = "Index" });

在我的一个视图中,我尝试像这样创建一个ActionLink

@Html.ActionLink("Title", "Index", "Window", new { firstId = "a", secondId = "b" }, null);

ActionLink 返回以下锚点:

<a href="/Window?firstId=a&secondId=b">Test</a>

但我期待的是:

<a href="/a/b">Test</a>

谁能解决这个问题?

【问题讨论】:

  • 这是你唯一的路线吗?
  • @ErikFunkenbusch 是的,这是我唯一的路线。
  • 如果这是你唯一的路线,我不明白这怎么可能。如果路线不匹配,您应该得到 404。你连默认路由都没有吗?
  • @TheOddGuy template 是什么?那不应该是url

标签: c# asp.net asp.net-mvc asp.net-mvc-routing asp.net-core


【解决方案1】:

我认为问题可能只是您使用的是template 属性而不是url。查看MSDN 后,我在Route 类上找不到template 属性,您是在实现自己的吗?

无论如何,我认为这应该可行(前提是您没有像您所说的那样定义其他路线):

routes.MapRoute(
    name: "Default",
    url: "{firstId}/{secondId}",
    defaults: new { controller = "Window", action = "Index" }
); 

【讨论】:

  • 智能感知显示“模板”而不是“网址”。可能是因为我使用的是 MVC 6(请参阅:i.gyazo.com/d18674e5d6291380322573cc25fb3e9c.png)当我手动(通过 url)访问“a/b”时,它似乎工作正常。
  • @TheOddGuy 是的,这是一件大事。可能值得编辑您的问题
  • @jumpingcode 是的,我猜是我的错,因为我是 MVC 新手 :-) 谢谢你的帮助。
  • 你能展示你的整个路线设置吗?既然您说在您的某个观点中您正在做其他事情,我假设您必须通过另一个动作到达它,因此是另一个路线......除此之外:考虑使用属性路线(默认情况下它们是打开的),这样您就可以用 [HttpGet("{firstId}/{secondId}"] 装饰你的动作,你就完成了,不需要默认值等。
【解决方案2】:

路线如下:

 routes.MapRoute(
     "Default",
     "Window/Index/{firstId}/{secondId}",
     new { controller = "Window", action = "Index" });

这将产生以下结果:

<a href="Window/Index/a/b">Test</a>

【讨论】:

  • 解决了我自己的答案格式问题,所以修改了我的评论。
  • 在您询问路线的问题中:/a/b 但您的答案呈现为window/index/a/b。我想如果您查看我对您的问题的评论,它将删除window/index
  • @jumpingcode 我想将来我需要先仔细检查原始发帖人,以确保唯一正确的答案是 a/b vs 他只是被混淆了?这会阻止你投反对票吗?
  • 嗯,你的答案是不正确的......所以当它是正确的时候,我会投赞成票。一般情况下是如何运作的。
  • @jumpingcode “如果你看看我对你的问题的评论”是什么意思?我没有问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 2014-09-07
相关资源
最近更新 更多