为什么@helper中没有扩展名?

时间:2015-03-21 02:39:07

标签: c# asp.net-mvc razor extension-methods

我创建了一个像这样的视图扩展名:

namespace MyProject
{
    public static class PageExtensions
    {
        public static HtmlString MyExt(this WebViewPage page)
        {

所以我现在可以输入Razor视图:

@this.MyExt()

请注意我的观点都包含通过Web.config声明它的命名空间:

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="MyProject" />
一切都很好。现在我想写一个@helper函数并在那里使用我的扩展名:

@helper MyHelper() {
    var page = (WebViewPage) CurrentPage;
    <div>
        @page.MyExt()
    </div>
}

但扩展程序在那里不可用。我得到的错误是:

  

编译器错误消息:CS1061:'System.Web.Mvc.WebViewPage'没有   包含'MyExt'的定义,没有扩展方法   'MyExt'接受第一个类型的参数   可以找到'System.Web.Mvc.WebViewPage'(你错过了使用   指令或程序集引用?)

我错过了什么?

3 个答案:

答案 0 :(得分:1)

确保您修改的web.config是&#34; /Views/Web.Config"

答案 1 :(得分:1)

Visual Studio需要重新编译项目才能识别您添加到视图中的帮助程序,我怀疑这是您的问题。

答案 2 :(得分:1)

问题是名称空间。删除封闭PageExtensions类的namespace指令修复它。为什么呢?我不确定