2011-12-22 91 views
3

我有一个ASP.NET MVC 3 Razor Web应用程序。从自定义HTML帮助程序访问WebViewPage

我有一个WebViewPage扩展:

public static bool Blah(this WebViewPage webViewPage) 
{ 
    return blah && blah; 
} 

,我想从我的HtmlHelper扩展访问此:

public static MvcHtmlString BlahHelper(this HtmlHelper htmlHelper, string linkText, string actionName) 
{ 
    // how can i get access to the WebViewPage extension method here? 
} 

我当然可以,如果复制WebViewPage扩展的功能,我必须,但只是想知道是否可以从HTML助手访问它。

回答

8
// Warning: this cast will crash 
// if you are not using the Razor view engine 
var wvp = (WebViewPage)htmlHelper.ViewDataContainer; 
var result = wvp.Blah(); 
+0

达林再次营救。谢谢哥们。 :) – RPM1984 2011-12-22 23:30:51

0

您应该更改该方法以扩展HttpContextBase,您可以从HtmlHelperWebViewPage访问该方法。

+0

问题是不是真正的扩展的功能,但如何实现我要问在一般意义上。我编辑了这个问题来反映 – RPM1984 2011-12-22 02:08:01

+0

我不认为这是可能的;在Locals窗口中浏览'htmlHelper'并查看是否可以找到它。 – SLaks 2011-12-22 02:49:01

0

我会尝试:

((WebViewPage)htmlHelper.ViewContext.View). Blah() 
+0

不错的尝试。看起来'View'实际上是视图引擎,而不是视图页面。我使用的是自定义视图引擎(Razor CSHTML生成器),所以类型是'PrecompiledRazorViewEngine'。 – RPM1984 2011-12-22 02:26:01

0

我有同样的问题,接受的答案使我的解决方案(+1)。也许这个提示也可以帮助其他人。 此外,我必须在强类型视图内使用通用版本的WebViewPage。 否则,我得到了类型转换异常。

public static MvcHtmlString ToBodyEnd<TModel>(this HtmlHelper<TModel> htmlHelper, ...) { 
     var vp = (DerivedWebViewPage<TModel>)htmlHelper.ViewDataContainer; 
    //... more code ... 
    } 
相关问题