2011-12-22 87 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 ... 
    } 
相關問題