为什么Razor找不到我的HTML Helper?

Adr*_*ore 6 razor asp.net-mvc-3

我正在尝试将"经典"ASP.NET MVC视图移植到Razor,并在尝试使用传统(非Razor)Html辅助方法时遇到困难.辅助方法具有以下签名:

public static string WrappedValidationSummary(this HtmlHelper htmlHelper, string SummaryError)
{
...
}
Run Code Online (Sandbox Code Playgroud)

在常规(非Razor)视图中使用辅助方法时,它可以正常工作.

在Razor视图中使用它时,如下所示:

@Html.WrappedValidationSummary("Mitarbeiter konnnte nicht angelegt werden.");
Run Code Online (Sandbox Code Playgroud)

我得到一个运行时错误消息

'System.Web.Mvc.HtmlHelper'不包含'WrappedValidationSummary'的定义,并且没有扩展方法'WrappedValidationSummary'接受类型为'System.Web.Mvc.HtmlHelper'的第一个参数'(你是否缺少using指令)或汇编参考?)

Visual Studio和Intellisense中的Razor语法检查器在查找扩展方法的定义时没有问题.重新编译项目没有帮助.

出了什么问题?

kim*_*3er 18

您是否已将助手的命名空间添加到Views/web.config中?

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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.Routing" />
        <add namespace="CUSTOM_NAMESPACE" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)

上述内容仅在您使用RC时才有效,如果您使用的是早期Beta,则需要在页面中添加命名空间或Global.asax.

另外,我建议将返回类型更改为HtmlString.

return new HtmlString(STRING_VALUE);
Run Code Online (Sandbox Code Playgroud)

  • 我已将命名空间添加到我的web.config中,但我不知道razor命名空间的额外配置部分.谢谢你的建议! (2认同)

Cal*_*aNN 5

或者,如果您只想用于特定的视图文件using,则可以在视图的第一行而不是Views/Web.config中使用.

@using your_current_web_namespace
.
.
.
@Html.WrappedValidationSummary("Mitarbeiter konnnte nicht angelegt werden.")
Run Code Online (Sandbox Code Playgroud)

  • 如果将其添加到Views/Web.config中,则需要重新启动Visual Studio才能使其正常工作(重建/清理解决方案不能解决问题). (3认同)