gpt4 book ai didi

asp.net-mvc - MVC 6 Anchor Tag Helper 没有产生预期的 href

转载 作者:行者123 更新时间:2023-12-03 07:55:55 25 4
gpt4 key购买 nike

相当简单的问题。

<a asp-controller="Guide" asp-action="Index" asp-route-title="@Model.Title">Read more</a>

产生链接 /Guide?title=Guide_no_1 但它应该产生链接 /Guide/Guide_no_1/

我可以找到的所有文档都指定它应该输出 /Guide/Guide_no_1/所以我觉得我错过了一些东西,某处的设置或某些属性。

我的路线是这样的,以防它们对链接创建产生影响
[Route("/Guide/")]
public IActionResult Index() { ... }

[Route("/Guide/{title}/{page?}/")]
public IActionResult Index(string title, int page = 0) { ... }

[Route("/Guide/OnePage/{title}/")]
public IActionResult Index(string title) { ... }

最佳答案

您需要指定属性路由的顺序。

  • 否则,它们将按默认顺序进行评估,这可能基于反射。第一个评估的是路由/指南/它匹配您指定的 Controller 和操作,并且由于它是匹配项,因此不会检查进一步的路由。

  • 您需要订购您的路线,以便您 首先评估最具体的路线 .在属性路由的情况下,您将使用 来做到这一点。订购 范围:
    [Route("Guide/OnePage/{title}/", Order = 1)]
    public IActionResult Index(string title) { ... }

    [Route("Guide/{title}/{page?}/", Order = 2)]
    public IActionResult Index(string title, int page = 0) { ... }

    [Route("Guide/", Order = 3)]
    public IActionResult Index() { ... }
  • 请注意它们在文件中出现的顺序无关紧要,评估顺序仅基于属性的 Order 参数。我只是写了它们,所以评估的顺序很清楚。

  • 现在你会注意到你的 2 strip 有参数 的路由也有问题。指南/OnePage/{title}/指南/{title}/{page?}/ .由于它们具有相同的 Controller 、 Action 和所需参数,因此 MVC 无法区分它们,第一个排序的将永远获胜!
  • 为这些路由之一使用不同的操作名称
  • 或者指定一个特定的 路线名称到永远丢失的那个,因此您可以使用该名称创建链接:
    [Route("Guide/{title}/{page?}/", Name = "titleAndPage", Order = 2)]
    public IActionResult Index(string title, int page = 0) { ... }

    <a asp-route="titleAndPage" asp-route-title="fooTitle">Read more</a>
  • 关于asp.net-mvc - MVC 6 Anchor Tag Helper 没有产生预期的 href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117712/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com