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

时间:2017-05-06 19:11:19

标签: 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>

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

  

/主页/列表页面= 5&安培;搜索= ABC

在ViewBag.routeValues中,我传递了其他参数,例如: search = abc&amp; active = true 并将其粘贴到网址&#39;之后的网址参数

我认为我不能使用标记帮助程序和&#39; asp-route&#39; - 那我该怎么办?

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

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

1 个答案:

答案 0 :(得分:5)

您应首先阅读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添加到网址中。