首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将asp:Menu直接呈现为HtmlWriter

将asp:Menu直接呈现为HtmlWriter
EN

Stack Overflow用户
提问于 2012-07-10 19:52:51
回答 1查看 312关注 0票数 0

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

下面是我的代码:

代码语言:javascript
复制
    <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有数据。我也尝试过手动向菜单中添加菜单项,但效果相同。

这会不会是未设置Menu控件的Page属性的某种问题?如果是这样的话,有没有办法掩饰呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-10 19:58:20

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11412740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档