找不到剃刀帮手

时间:2016-01-25 16:25:13

标签: c# asp.net-mvc razor

我试图添加Razor助手,但无法让视图识别它。

我有最简单的帮手......

using System.Web.Mvc.Html;

namespace CharityVouchers.Web.Helpers {
  public static class Razorhelper {
    public static string Jim(this HtmlHelper helper) {
      return "Jim";
    }
  }
}

如果我转到我的_Layout.cshtml,并在顶部添加以下内容......

@using CharityVouchers.Web.Helpers

...然后尝试使用我的助手降低文件的下限,当我在" Html"之后的时间段内,我不会获得智能感知。如果我手动输入方法名称,它会显示为红色,我会收到一条错误消息。

@Html.Jim()

错误讯息是......

CS1061:' System.Web.Mvc.HtmlHelper'不包含' Jim'的定义并没有延伸方法' Jim'接受类型为#System; Web.Mvc.HtmlHelper'的第一个参数。可以找到(您是否缺少using指令或程序集引用?)

我已经尝试了所有我能找到的东西,但似乎没有任何帮助。任何想法,我做错了什么?

编辑忘记提到我尝试将名称空间添加到Web.config中,主要名称和视图中的名称空间,但它没有任何区别。由于我在视图中使用它不应该有任何区别,但它值得一提。

2 个答案:

答案 0 :(得分:0)

在Views文件夹的web.config中,添加你的html助手名称空间<add namespace="CharityVouchers.Web.Helpers" />。例如。

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Mvc.Html5" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="CharityVouchers.Web.Helpers" />       
      </namespaces>
    </pages>
  </system.web.webPages.razor>

这是我使用你的代码的结果 -

enter image description here

您的CharityVouchers.Web.Helpers命名空间与MVC网站位于同一项目中,还是肯定位于包含的DLL中?

我注意到的另一个不同之处(可能只是你的剪切和粘贴代码),我需要在课程中添加using System.Web.Mvc;而不是using System.Web.Mvc.Html;

答案 1 :(得分:0)

仔细检查Views文件夹中的web.config以确保正确的命名空间可用:

<namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization"/>
    <add namespace="System.Web.Routing" />
  </namespaces>