1

我正在尝试为 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 类来执行此操作,该类有效,但我想了解为什么我不能使用扩展方法。

谢谢

4

3 回答 3

1

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

于 2013-06-12T08:47:47.907 回答
0

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

  <assemblies>
    <add assembly="YourAssembly, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
于 2013-03-04T00:06:32.063 回答
0

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

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

        public Foo F
        {
        //do something...

        }

    }  

然后将其添加到您的web.config in<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

于 2019-10-14T13:21:13.263 回答