28

我想使用自定义@Html.ActionLink

我正在尝试使用以下代码:-

public static class LinkExtensions
{
    public static MvcHtmlString MyActionLink(
        this HtmlHelper htmlHelper, 
        string linkText, 
        string action, 
        string controller)
    {
        var currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
        var currentController = mlHelper.ViewContext.RouteData.GetRequiredString("controller");

        if (action == currentAction && controller == currentController)
        {
          var anchor = new TagBuilder("a");
          anchor.Attributes["href"] = "#";
          anchor.AddCssClass("currentPageCSS");
          anchor.SetInnerText(linkText);
          return MvcHtmlString.Create(anchor.ToString());
         }

         return htmlHelper.ActionLink(linkText, action, controller);
    }
}

来自知道您在哪个页面上的自定义 ActionLink 帮助程序

但我越来越

System.Web.Mvc.HtmlHelper'不包含'ActionLink'的定义,并且找不到接受'System.Web.Mvc.HtmlHelper'类型的第一个参数的扩展方法'ActionLink'(您是否缺少使用指令或装配参考?

4

6 回答 6

53

将此添加using System.Web.Mvc.Html;到您的文件顶部

于 2012-10-02T14:24:18.343 回答
18

确保您的 web.config 中包含扩展类的命名空间。例如:

namespace MyProject.Extensions
{
    public static class LinkExtensions
    {
        //code
    }
}

在位于“视图”文件夹中的站点 Web.config 和/或 Web.config 中:

  <system.web>
    <pages>
      <namespaces>
        <add namespace="MyProject.Extensions" />
      </namespaces>
    </pages>
  </system.web>

否则,在您的视图页面顶部包含一个命名空间的“使用”块可以工作,但对于常见的命名空间,我会执行上述操作。

ASPX:

<%@ Import namespace="MyProject.Extensions" %>

剃刀:

@using MyProject.Extensions
于 2012-10-02T14:24:13.570 回答
8

不要忘记第一个参数只接受string。如果不是,它将向您显示此错误。

于 2019-11-08T18:56:43.883 回答
7

确保您在类文件中有以下使用:

using System.Web.Mvc.Html;

这是必需的,因为HtmlHelper该类位于System.Web.Mvc命名空间中,但ActionLink扩展方法位于System.Web.Mvc.Html命名空间中。

于 2012-10-02T14:24:37.780 回答
2

如果您使用 nopcommerce 在视图文件的顶部添加此 using 语句。

@using Nop.Web.Framework.UI
于 2018-04-17T04:57:50.847 回答
0

我的问题是,我的语法不完整,“@Html.actionLink”,在一个视图中。看起来我已经开始添加一个动作链接并转向不同的方向,但忘记删除部分动作链接,这导致了与上面相同的错误......所以检查你的语法,因为这会引发相同的运行时错误。祝你好运!

于 2019-05-29T13:11:38.303 回答