【问题标题】:Why does @Url.Action cause a compile time error in ASP.NET Core?为什么@Url.Action 会在 ASP.NET Core 中导致编译时错误?
【发布时间】:2023-03-03 18:13:02
【问题描述】:

我无法在 ASP.NET Core 中使用 @Url.Action,因为我有错误:

IUrlHelper 没有名为 Action 的适用方法

我想将@Url.Action 用于:

<a href="@(Url.Action(ViewBag.actionName, ViewBag.controllerName, new { page = i }) + ViewBag.routeValues)">page i</a>

在 ASP.NET MVC 中,它生成了我的网址,例如:

/Home/List?page=5&search=abc

在 ViewBag.routeValues 中,我传递了其他参数,例如:search=abc&active=true 并将其粘贴到 url 'page' 参数之后

我想我不能使用标签助手和“asp-route”做同样的事情 - 那我该怎么办?


好的 - 我需要将 ViewBag 转换为字符串:

<a href="@(Url.Action((string)ViewBag.actionName, (string)ViewBag.controllerName, new { page = i }) + (string)ViewBag.routeValues)">page i</a>

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    您应该首先阅读ASP.NET Core Documentation 以了解标签助手是什么以及如何使用它们。

    在 ASP.NET Core 的 Razor 实现中,使用标签助手而不是助手方法。

    <a href="@(Url.Action(ViewBag.actionName, ViewBag.controllerName, new { page = i }) + ViewBag.routeValues)">page i</a>
    

    会翻译成

    <a asp-controller="@ViewBag.actionName" asp-action="@ViewBag.controllerName" asp-route-id = "@i">page i</a>
    

    "asp-route" 可以是路由参数或查询参数(如果给定的操作没有这样的路由参数)。所以asp-route-xyz="abc" 会将?xyz=abc 添加到url。

    【讨论】:

    • 然后使用asp-all-route-data标签助手,see here
    猜你喜欢
    • 2018-04-08
    • 2011-06-09
    • 1970-01-01
    • 2012-10-05
    • 2021-12-29
    • 2019-08-30
    • 2014-05-23
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多