【问题标题】:System.Web.Mvc.HtmlHelper' does not contain a definition for 'ActionLink'System.Web.Mvc.HtmlHelper' 不包含 'ActionLink' 的定义
【发布时间】:2012-09-23 09:47:44
【问题描述】:

我想使用自定义@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);
    }
}

来自Custom ActionLink helper that knows what page you're on

但我得到了

System.Web.Mvc.HtmlHelper' 不包含对 'ActionLink' 和没有扩展方法 'ActionLink' 接受第一个 可以找到“System.Web.Mvc.HtmlHelper”类型的参数(你是 缺少 using 指令或程序集引用?

【问题讨论】:

标签: asp.net-mvc-3 asp.net-mvc-4 html.actionlink


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    确保您的 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
    

    【讨论】:

    • 这个答案的 web.config 部分最终是我所缺少的。
    • 我遇到了同样的错误,但该解决方案不起作用。这是在 RAZOR 文件中。我尝试了@using Vidly.Extensions(我假设我们应该用我们的实际项目名称替换 MyProject)但是 .Extensions 不在自动完成中。
    【解决方案3】:

    别忘了第一个参数只接受字符串。如果不是,它将显示此错误。

    【讨论】:

    • 果然必须将第一个参数类型 int 更改为 string 然后很高兴&lt;td&gt;@Html.ActionLink(row.Count.ToString(), "Dashboard", "Therapist"...)&lt;/td&gt;
    【解决方案4】:

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

    using System.Web.Mvc.Html;
    

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

    【讨论】:

    • 好电话,包含在股票 web.config 中,但谁知道在这种情况下是否正确
    • @JohnCulviner 诀窍是问题并不准确,错误发生在哪里。如果是视图,那么您的答案是正确的(视图看不到命名空间,因此需要将其添加到 web.config 中)。如果错误来自扩展类,那么它正在使用扩展类文件中的指令(web.config 在这里没有帮助)。我在这里猜测是因为错误是关于 ActionLink 而不是 MyActionLink 方法 - 我们需要等待作者澄清(希望他会回到这里)。
    【解决方案5】:

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

    @using Nop.Web.Framework.UI
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多