【问题标题】:Access WebViewPage from custom HTML Helper从自定义 HTML Helper 访问 WebViewPage
【发布时间】:2011-12-22 02:02:13
【问题描述】:

我有一个 ASP.NET MVC 3 Razor Web 应用程序。

我有一个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 帮助程序访问它。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor html-helper viewpage


    【解决方案1】:
    // Warning: this cast will crash
    // if you are not using the Razor view engine
    var wvp = (WebViewPage)htmlHelper.ViewDataContainer;
    var result = wvp.Blah();
    

    【讨论】:

    • 达林再次救援。谢谢,兄弟。 :)
    【解决方案2】:

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

    【讨论】:

    • 问题不是关于扩展的功能,而是如何实现我在一般意义上所要求的。我已经编辑了问题以反映这一点
    • 我不认为这是可能的;在 Locals 窗口中探索 htmlHelper,看看是否可以找到它。
    【解决方案3】:

    我会尝试:

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

    【讨论】:

    • 不错的尝试。看来View 实际上是视图引擎,而不是视图页面。我正在使用自定义视图引擎(Razor CSHTML 生成器),所以类型是PrecompiledRazorViewEngine
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 2017-06-21
      • 1970-01-01
      • 2013-02-02
      相关资源
      最近更新 更多