【问题标题】:Why aren't ASP.NET MVC tag helpers creating the correct link?为什么 ASP.NET MVC 标签助手不能创建正确的链接?
【发布时间】:2019-01-03 09:28:38
【问题描述】:

我有一个带有脚手架身份的 asp.net 核心 MVC 项目,而 _LoginPartial 视图中的标签助手表现得很奇怪。在 Razor 视图中,链接看起来像这样,并且不导航到任何页面或视图。

  <a class="nav-link" asp-area="Identity" asp-page="/Account/Manage/Index">Manage Account</a>

但由于某种原因,它被渲染成这样(取自 chrome 的开发控制台):

href="/?area=Identity&page=%2FAccount%2FManage%2FIndex"

我不知道为什么会这样,我不知道如何让它正确呈现并允许导航到正确的页面。

【问题讨论】:

  • 你应该使用asp-controller=".."asp-action="..."
  • asp-page="/Account/Manage/Index" 这样写=> asp-page="~/Account/Manage/Index"
  • @TazbirBhuiyan 抛出 InvalidOperationException
  • 默认路由控制器模板:"{controller=Home}/{action=Index}/{id}/{closeOnSubmit?}" 你的控制器路由模板怎么样?
  • 我不得不删除我的答案。这是一团糟,包括文档和搜索 github 问题。我发现了这个隐藏,它可能会有所帮助:docs.microsoft.com/en-us/aspnet/core/security/authentication/…

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

我实际上发现了这个问题。在 Identity 区域的 Configure 方法中的 IdentityHostingStartup 类中,我已将 services.AddDefaultIdentity&lt;IdentityUser&gt; 更改为 services.AddIdentity(IdentityUser, IdentityRole&gt; 这对我来说没有意义,为什么这会更改 URL 的生成方式,但是一旦我将其更改回来到services.AddDefaultIdentity&lt;IdentityUser&gt; 一切恢复正常。

【讨论】:

    【解决方案2】:

    你可以试试关注

    <a asp-area="Account"
      asp-controller="Manage"
      asp-action="Index">About Blog</a>
    

    它将创建以下html

    <a href="/Account/Manage/Index">About Blog</a>
    

    如果您有如下自定义路线映射

    [Route("/Speaker/Evaluations", Name = "speakerevals")]
    public IActionResult Evaluations() => View();
    

    那就试试吧

    <a asp-route="speakerevals">Speaker Evaluations</a>
    

    它将创建如下所示的html

    <a href="/Speaker/Evaluations">Speaker Evaluations</a>
    

    更多信息请点击here

    【讨论】:

    • 您绝对可以混合使用&lt;asp-area=".."&gt;&lt;asp-page=".."&gt;,尤其是因为这是在dotnet new mvc --auth Individual 命令生成的模板中的连接方式
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2012-02-23
    • 2019-07-10
    相关资源
    最近更新 更多