我正在尝试传递 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 。这样,可以为每个菜单传递一个 id,以供页面上的每个指定 TreeFilter 使用。我还能够将该信息提取到文件后面的代码中,并将其转换为 int 以供 TreeFilter 使用(以下所有代码都在 PageLoad 中完成):
string sideIdstr = Request.QueryString["side"];
int sideId = Convert.ToInt32(sideIdstr);
menuModelSource2.TreeFilter.Id = sideId;
但是,MenuModelSource.TreeFilter 仍然呈现 355 菜单而不是 375 菜单。
我可以使用以下命令“验证” 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,我也会对此持开放态度。