页面上有两个不同的导航菜单,它们各自独立的用户控件。两个菜单中的菜单项可以导航到相同的页面。顶部菜单有一些 jQuery 动画,而左侧菜单没有。
问题是当锚标记在转发器中并且转发器在用户控件中(锚标记是动态创建的)时,如何获取导航菜单中的哪个锚标记进行了回发。问题是顶部菜单用户控件代码隐藏运行并为隐藏字段设置了一些值,因此 jQuery 动画将为顶部菜单正确运行,但是当单击左侧菜单时,它不应该运行并在顶部菜单代码隐藏中设置隐藏字段。所以我需要弄清楚如何区分这两个菜单。
这是中继器标记:
<asp:Repeater runat="server" ID="RightSide">
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate>
<li data-type="<%# ((Item)Container.DataItem).HasChildren ? "dropdown" : "link" %>" class="<%# ((Item)Container.DataItem).HasChildren ? "dropdown" : "link" %>">
<a href='<%# GetLink(((Item)Container.DataItem),"MenuLink") %>'><%#((Item)Container.DataItem)["MenuTitle"] %></a>
</li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
TopMenu .cs 代码:
public partial class TopMenu
{
private ID _homeId = new ID("{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}");
protected void Page_Load(object sender, EventArgs e)
{
RightSide.DataSource = GetMultiList("Right side", RootItem);
RightSide.DataBind();
***HERE I NEED TO MAKE THE CHECK.
So the code below should only run if the postback came from the topmenu***
var sectionItem = GetAncestorOrDefault(CurrentItem);
Sitecore.Data.Database context = Sitecore.Context.Database;
Sitecore.Data.Items.Item homeItem = context.GetItem("/sitecore/content/home");
List<Item> items = new List<Item>();
Sitecore.Data.Fields.MultilistField multilistField = homeItem.Fields["Right Side"];
foreach (string id in multilistField)
{
Sitecore.Data.Items.Item multiItem = Sitecore.Context.Database.Items.GetItem(id);
if (multiItem.HasChildren)
{
items.Add(multiItem);
}
}
foreach (Item item in items)
{
if (item.Name.Equals(sectionItem.Name))
{
hiddenAttr.Value = sectionItem.Name;
break;
}
else
{
hiddenAttr.Value = String.Empty;
}
}
}
}
我尝试过使用 eventtarget,但它始终为空,并且隐藏字段的值在代码隐藏中始终为“”。我没主意了...
如果需要,我会发布更多代码。
提前致谢!
厄瓦尔