Razor WebViewPage扩展方法不起作用

时间:2013-03-03 23:58:56

标签: c# asp.net razor

我正在尝试为WebViewPage类创建扩展方法,以便能够在我的.cshtml文件中调用@Foo()。 我几乎可以肯定以下代码应该可以工作,但它不会......

我正在使用System.Web.Mvc,所以我认为这也不是命名空间问题。

namespace System.Web.Mvc
{

    public static class WebViewPageExtensions
    { 

        public static void Foo(this System.Web.Mvc.WebViewPage view)
        {
            //do something...
        }

    }
}

注意:我也尝试使用自定义的WebViewPage类来完成此操作,但是我想了解为什么我不能使用扩展方法。

由于

3 个答案:

答案 0 :(得分:1)

也许是一个迟到的答案,但你应该能够在你的cshtml文件中调用@ this.Foo()。

答案 1 :(得分:0)

您是否在web.config中为webviewpages声明了程序集?

  <assemblies>
    <add assembly="YourAssembly, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>

答案 2 :(得分:0)

首先,您应该创建自己的WebViewPage

 public abstract class MyWebViewPage : System.Web.Mvc.WebViewPage
    {

        public Foo F
        {
        //do something...

        }

    }  

然后将其添加到web.config部分的<system.web.webPages.razor>中:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="[your custom webview class with namespace,ex: myproject.utiles.MyWebViewPage ]">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>  

然后您可以在所有视图中轻松使用@foo