为什么@ Url.Action在ASP.NET Core中导致编译时错误?

Pan*_*wie 1 asp.net-core

我无法在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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

我认为使用标签帮助程序和“ asp-route”无法做同样的事情-那我该怎么办?


好的-我需要将ViewBag字符串化:

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

Tse*_*eng 5

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

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

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

将转化为

<a asp-controller="@ViewBag.actionName" asp-action="@ViewBag.controllerName" asp-route-id = "@i">page i</a>
Run Code Online (Sandbox Code Playgroud)

“ asp-route”可以是路由参数,也可以是查询参数(如果给定操作没有这样的路由参数)。因此asp-route-xyz="abc"会添加?xyz=abc到网址中。