这个问题发生在ASP.NET 4.6中,我看过一些类似的帖子,但是他们通常不会引用相同的控件(这里是内置的)或最终得出结论"只是使用这里有一个不同的/外部的控件:html link",这对我来说不是一个真正的选择。
的Site.Master
<div id="HeaderProper">
<div id="HeaderProperTitle">
<asp:Menu ID="HeaderProperMenu" runat="server" DataSourceID="HeaderProperSiteMap" Orientation="Horizontal"
BackColor="#ff2400"
RenderingMode="List"
StaticEnableDefaultPopOutImage="false"
StaticDisplayLevels="2"
StaticHoverStyle-BackColor="#000000"
StaticMenuItemStyle-HorizontalPadding="15px"
StaticMenuItemStyle-Height="42px"
DynamicHoverStyle-BackColor="#000000"
DynamicMenuItemStyle-HorizontalPadding="5px"
DynamicMenuItemStyle-BackColor="#ff2400"
DynamicMenuItemStyle-Font-Size="24px"/>
<asp:SiteMapDataSource ID="HeaderProperSiteMap" runat="server" />
</div>
SomePage.aspx页面
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h1>Complete List</h1>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div class="SortOrderSelection">
Sort by
<asp:DropDownList ID="cbxSortBy" runat="server" AutoPostBack="true"
OnSelectedIndexChanged="cbxSortBy_SelectedIndexChanged" />
</div>
<asp:Panel ID="SortedList" CssClass="top-margin five-columns" runat="server" />
<asp:Panel ID="Summary" CssClass="top-margin" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</asp:Content>
如何重现: 在DropDownList中选择一个项目,这会导致部分回发。菜单然后停止工作,即 - 下拉/悬停菜单不会打开,但是第一级链接似乎正常运行。刷新整个页面可以解决问题(呃?)。
而且,与我发现的相反: 1)菜单不在UpdatePanel中,我承认这是不受支持的解决方案 2)当RenderingMode设置为Table时,菜单工作正常,但生成一个非常难看的html代码,我想避免。没有提到边距中的额外怪癖,必须通过丑陋的修复进行调整。 3)我尝试设置z-index:1000 ... 0!重要,如某些来源所建议的(在大多数菜单相关的样式上),但无济于事。
如果仍然在列表渲染模式下使用asp:Menu控件,可能会尽可能少地进行干预,我将不胜感激。我的观点是使用内置功能并保持代码清除不必要的JS,jQuery(如果可能的话;否则我会为这个问题打开Connect案例)。 提前谢谢。
答案 0 :(得分:1)
将菜单放入更新面板应该有效,因为它会指示服务器在回发后更新它。如果没有这个,任何重新发布都可能会导致丢失元素中的某些事件。刷新是有效的,因为您刷新整个页面而不仅仅是它的一些元素。