【问题标题】:asp-controller and asp-action attributes not workingasp-controller 和 asp-action 属性不起作用
【发布时间】:2016-08-05 20:32:58
【问题描述】:

有谁知道我缺少什么,为什么那些 asp-controller 和 asp-action 标签对我不起作用。我正在 ASP.NET MVC Core 中实现一个项目。

这不会触发:

<a asp-controller="App" asp-action="Trips" class="btn btn-lg btn-success">Go to Trips</a>

剃须刀工作正常:

@Html.ActionLink("Go to Trips", "Trips", "App", new object { }, new { @class = "btn btn-lg btn-success" })

我是否需要配置一些服务才能使其正常工作。还有,首选哪种方式? Razor 在 MVC 中很受欢迎,这些 asp- 标签是一种新的、更好的方法吗?

【问题讨论】:

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


【解决方案1】:

经过一番挖掘,我发现asp-controllerasp-action 属性被称为锚标记助手,并且是其中的一部分

Microsoft.AspNetCore.Mvc.TagHelpers 命名空间

显然它是使用 Razor 的替代方法。我能够通过创建“_ViewImports.cshtml”并将以下内容添加到文件中来解决该问题:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

一旦完成,锚标签助手就会被识别,并且按钮开始按预期工作。

【讨论】:

  • 出现此问题时正在创建我自己的区域。我刚刚复制了现有的 _ViewImports.cshtml,然后它就可以工作了,谢谢!
  • 太棒了++。这是一个非常有用的注意点,尤其是在使用区域时。
  • 因为脚手架实际上不可能包含所需的引用...
  • 为什么在 ASP.NET Core MVC 项目中工作时应将 asp 属性视为帮助程序?代码味道......但这个答案解决了我的问题。
  • 我有这个,但我没有注意到我用分号结束了我的行。这杀死了导入助手。一旦被淘汰,它就按预期工作。有谁知道这是为什么?这是 _ViewImports 的行为吗?如果智能感知没有警告我,我怎么知道?
【解决方案2】:

在使用区域时,我必须将 _ViewImport 复制到新的 Area\MyArea\Views

【讨论】:

  • 这应该是评论而不是答案。您应该发布一个完整的答案帖子,说明它如何解决 OP 问题?
【解决方案3】:

在cshtml文件的顶部添加@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers是可行的。

【讨论】:

    【解决方案4】:

    我花了一段时间才弄明白——但如果你像我一样还在苦苦挣扎 Cannot resolve symbol 'addTagHelper' 在尝试accepted answer 之后,您可能正在运行ASP.NET MVC 项目而不是ASP.NET Core 项目,因此无法使用taghelper。相反,您必须使用htmlhelper

    TLDR;

    如果this answer 不适合你, 请使用htmlhelper (*)

    @using (Html.BeginForm("Trips", "App")) 
    {
     ...
    }
    

    ..而不是taghelper (**)

    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    
    
    <form asp-controller="App" asp-action="Trips">
       ...
    </form>
    

    (*) 适用于

    ASP.NET MVC 5.2

    (**) 适用于

    ASP.NET Core 2.1、1.0、1.1、2.0、2.2、3.0、3.1、5.0

    【讨论】:

      【解决方案5】:
      @{    
        IDictionary<string, string> routeData = new Dictionary<string, string>();
        routeData.Add("Id", point.Id.ToString());
        routeData.Add("Name", point.Name);
        routeData.Add("Address", point.Address);
      }
      <a asp-page="./AddCollectionPoint" asp-page-handler="Edit" asp-all-route-data="@routeData">
      

      Razor 页面有 modelcshtml.cs 文件,继承自“PageModel”,所以在我的情况下,我在这些文件中的操作方法没有被识别...我用 asp-page 替换了 asp-controller,用 asp-替换了 asp-action页面处理程序。另外在startup.cs中添加了一行默认路由。

         app.UseEndpoints(endpoints =>
         { endpoints.MapRazorPages(); endpoints.MapControllerRoute("default","{controller=Home}/{action=Index}");});
      

      它成功了。

      【讨论】:

        猜你喜欢
        • 2016-10-22
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 2022-10-24
        • 2022-12-04
        • 1970-01-01
        • 2016-08-23
        • 2016-02-12
        相关资源
        最近更新 更多