0

いくつかの MVC ページを既存の WebForms プロジェクトに追加しようとしています。WebForms マスター ページ/ヘルパー メソッドへの変更をできるだけ少なくしたいと考えています。WebForms プロジェクトは asp:Menu を使用してメニュー ナビゲーションを構築していたので、同じメニューを動的に構築し、コントロールを StringBuilder をラップする HtmlWriter にレンダリングし、出力を返す HTML ヘルパー メソッドを作成しました。

これが私のコードです:

    <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 プロパティが設定されていないことによる何らかの問題でしょうか? もしそうなら、それを偽造する方法はありますか?

4

1 に答える 1

1

DataBind()このコード サンプルでは、​​すべてのデータをバインドしてメニュー項目を作成するためにメニューを呼び出しているわけではありません。への呼び出しを追加しますDataBind()

それでもうまくいかない場合は、ファイルを読み込んで、プログラムでメニュー項目を作成してください。

于 2012-07-10T11:58:19.510 に答える