特定のメニューを生成するために ektron:MenuModelSource.TreeFilter コントロールが使用する値を渡そうとしています。クエリ文字列から値を取得できます
私はメニュー ソリューションに取り組んでおり、どうすればよいか困っています。
以下の Web サーバー コントロールの TreeFilter プロパティの Id を設定する必要があります。
<ektron:MenuModelSource ID="menuModelSource2" runat="server">
<TreeFilter Id="355" Depth="1" />
</ektron:MenuModelSource>
?top=355&side=375&low=123 のようなクエリ文字列を渡しています。このようにして、ページ上の指定された TreeFilter ごとに使用される各メニューに ID を渡すことができます。また、その情報をコード ビハインド ファイルに取り込み、それを TreeFilter で使用するために int に変換することもできます (次のコードはすべて PageLoad で実行されます)。
string sideIdstr = Request.QueryString["side"];
int sideId = Convert.ToInt32(sideIdstr);
menuModelSource2.TreeFilter.Id = sideId;
ただし、MenuModelSource.TreeFilter は、375 メニューではなく 355 メニューをレンダリングしています。
以下を使用して、ID が実際に 375 に変更されたことを「確認」できます。
Response.Write("<h1>" + menuModelSource2.TreeFilter.Id + "</h1>");
…ページに 375 が表示されます。
TreeFilter がクエリ文字列の ID を使用するようにするには、代わりに何をすべきですか? 誰かがサーバー コントロールで DataBind() を試すことを提案しましたが、それでも同じ結果が得られます。これが私の現在のコードです:
protected void Page_Load(object sender, EventArgs e)
{
Ektron.Cms.API.Content.Content ContentAPI = new Ektron.Cms.API.Content.Content();
Page.Title = ContentAPI.GetContent(PageHost1.PageID).Title;
string sideIdstr = Request.QueryString["side"];
int sideId = Convert.ToInt32(sideIdstr);
menuModelSource2.TreeFilter.Id = sideId;
menuModelSource2.DataBind();
menuView2.DataBind();
Response.Write("<h1>" + menuModelSource2.TreeFilter.Id + "</h1>");
}
…そして私のマークアップはこれです…</p>
<ektron:MenuModelSource ID="menuModelSource2" runat="server">
<TreeFilter Id="355" Depth="1" />
</ektron:MenuModelSource>
<ektron:MenuView ID="menuView2" runat="server" ModelSourceID="menuModelSource2">
<ListTemplate>
<ul id="menunav" runat="server" class="unstyled subnav">
<asp:PlaceHolder ID="listPlaceholder" runat="server" />
</ul>
</ListTemplate>
<ItemTemplate>
<li <%# ((Eval("Type").ToString().ToLower() == "submenu")) ? @" class=""subnav""" : @" class=""menuitem""" %>>
<asp:HyperLink ID="nodeLink" runat="server" Text='<%# Eval("Text") %>' NavigateUrl='<%# Utility.getNavigateUrl( Eval("NavigateUrl") ) %>' />
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</li>
</ItemTemplate>
</ektron:MenuView>
Ektron Framework API を使用するなど、これを行うためのより良い方法があれば、私もそれを受け入れます。