Доступ к WebViewPage из пользовательского помощника HTML - PullRequest
4 голосов
/ 22 декабря 2011

У меня есть веб-приложение ASP.NET MVC 3 Razor.

У меня есть 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.

Ответы [ 4 ]

9 голосов
/ 22 декабря 2011
// Warning: this cast will crash
// if you are not using the Razor view engine
var wvp = (WebViewPage)htmlHelper.ViewDataContainer;
var result = wvp.Blah();
0 голосов
/ 03 июня 2014

У меня была та же проблема, и принятый ответ привел меня к решению (+1).Может быть, этот намек тоже кому-то поможет.Кроме того, мне пришлось использовать универсальную версию WebViewPage в строгом представлении типа.В противном случае я получил исключение приведения типа.

public static MvcHtmlString ToBodyEnd<TModel>(this HtmlHelper<TModel> htmlHelper, ...) {
       var vp = (DerivedWebViewPage<TModel>)htmlHelper.ViewDataContainer;
    //... more code ...
    }
0 голосов
/ 22 декабря 2011

Я бы попробовал:

((WebViewPage)htmlHelper.ViewContext.View). Blah()
0 голосов
/ 22 декабря 2011

Вы должны изменить этот метод для расширения HttpContextBase, к которому вы можете получить доступ как из HtmlHelper, так и WebViewPage.

...