【问题标题】:Render an asp:Menu directly to an HtmlWriter将 asp:Menu 直接渲染到 HtmlWriter
【发布时间】:2012-07-09 21:29:42
【问题描述】:

我正在将一些 MVC 页面添加到现有的 WebForms 项目中。我想继续对 WebForms 母版页/辅助方法进行尽可能少的更改。 WebForms 项目使用 asp:Menu 来构建菜单导航,因此我创建了一个 HTML 辅助方法,该方法动态构建相同的菜单,将控件呈现给包装 StringBuilder 的 HtmlWriter,然后返回输出。

这是我的代码:

    <Extension()> _
    Public Function RenderMenu(helper As HtmlHelper) As MvcHtmlString
        'Build menu with asp .net standard menu control
        Dim menuSource As New System.Web.UI.WebControls.SiteMapDataSource() With {
            .ShowStartingNode = False,
            .SiteMapProvider = "MySiteMapProvider"
        }

        Dim menuBuilder As New System.Web.UI.WebControls.Menu() With {
            .CssClass = "menu",
            .IncludeStyleBlock = "false",
            .Orientation = System.Web.UI.WebControls.Orientation.Horizontal,
            .StaticSubMenuIndent = New System.Web.UI.WebControls.Unit(20),
            .RenderingMode = System.Web.UI.WebControls.MenuRenderingMode.List,
            .DataSource = menuSource
        }
        menuBuilder.DynamicHoverStyle.BorderStyle = System.Web.UI.WebControls.BorderStyle.Dotted

        Dim buffer As New StringBuilder()
        Dim writer As New System.Web.UI.HtmlTextWriter(New StringWriter(buffer))

        menuBuilder.RenderControl(writer)

        'Convert rendered html to an mvc html string (to avoid re-encoding)
        Return New MvcHtmlString(buffer.ToString())
    End Function

问题是,没有任何东西被渲染到我的 HtmlWriter!我已经在调试器上逐步完成并确认我的 menuSource 有数据。我也尝试过手动将项目添加到菜单中,但结果相同。

这可能是菜单控件的 Page 属性未设置的某种问题吗?如果是这样,有没有办法伪造它?

【问题讨论】:

    标签: asp.net asp.net-mvc servercontrols


    【解决方案1】:

    在此代码示例中,您没有在菜单上调用DataBind() 来绑定所有数据并创建菜单项。添加对DataBind()的呼叫。

    如果仍然不起作用,请读入文件并以编程方式创建菜单项。

    【讨论】:

    • 现在好像是在添加数据,但是对 RenderControl 的调用抛出了 NullReferenceException。
    • 没关系,我能够创建一个假表单,然后将其渲染:Dim fakeForm As New System.Web.UI.HtmlControls.HtmlForm() With { .Page = New System.Web. UI.Page() } fakeForm.Controls.Add(menuBuilder)
    猜你喜欢
    • 2013-02-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多