. net Ektron 8.6:如何在Ektron服务器控制菜单模型(treeffilter . id)的查询字符串中



我试图传递电子:MenuModelSource的值。treeffilter控件将用于生成给定菜单。我能够从查询字符串

中获得值

我正在研究菜单解决方案,我不知道该怎么做。

我需要设置以下web服务器控件的treeffilter属性的Id:

<ektron:MenuModelSource ID="menuModelSource2" runat="server">
  <TreeFilter Id="355" Depth="1" />
</ektron:MenuModelSource>

我正在传递一个查询字符串,看起来像:?top=355&side=375&low=123这样一个id可以传递给每个菜单被每个指定的treeffilter在一个页面上使用。我还能够将该信息拉到文件后面的代码中,并将其转换为int供TreeFilter使用(以下所有代码都在PageLoad中完成):

string sideIdstr = Request.QueryString["side"];
int sideId = Convert.ToInt32(sideIdstr);
menuModelSource2.TreeFilter.Id = sideId;

然而,MenuModelSource。treeffilter仍然渲染355菜单,而不是375菜单。

我可以通过以下命令"验证"id确实被更改为375:

Response.Write("<h1>" + menuModelSource2.TreeFilter.Id + "</h1>");

…在页面上显示375。

我应该怎么做,而不是得到treeffilter使用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>");
}

…我的标记是这样的…

<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框架API,我也会开放。

更新模型源的参数后,您需要在模型源上调用LoadData。然而,该方法不是公共的,因此您需要使用反射来调用该方法。

 menuModelSource2.GetType().GetMethod("LoadData", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.FlattenHierarchy).Invoke(menuModelSource2, new object[] { });

这在reference.ektron.com上有记录,参见aspx.cs选项卡。它在底部。

最新更新