水平asp.net菜单显示为垂直列表

时间:2012-02-01 22:08:47

标签: asp.net html aspmenu

http://i44.tinypic.com/5ureav.png

当我的页面偶尔渲染时,水平菜单就会显示出来。为什么呢?

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" 
    EnableViewState="false" IncludeStyleBlock="false" 
    Orientation="Horizontal" ClientIDMode="AutoID">
    <Items></Items>
</asp:Menu>

它通常在页面加载大量数据时执行此操作,但是当数据完成加载时,它永远不会回到水平。

使用IE 7,8和9以及Chrome进行测试。

我环顾网络,发现有些人说这是z-index,但调整没有帮助。

我正在使用IE8中的“开发人员工具”进一步排除故障,并发现一些未成功的javascript调用。我不知道他们的意思。

<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ctl00$MainContent$tsmgrEmployees', 'aspnetForm', ['tctl00$MainContent$uPanelEmployees',''], ['ctl00$MainContent$btnClear','','ctl00$MainContent$txtEUID','','ctl00$MainContent$txtFirstName','','ctl00$MainContent$txtLastName',''], [], 90, 'ctl00');
//]]>
</script>

产生错误

'Sys.WebForms.PageRequestManager'为null或不是对象

<script type='text/javascript'>new Sys.WebForms.Menu({ element: 'ctl00_NavigationMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false });</script>

产生错误

'Sys.Webforms.Menu'为null或不是对象

我相信剩下的错误都是这两个错误。你认为我应该用更新的库替换jscript库吗?它可能与浏览器有关,因为我使用的是IE8(不兼容模式)。

另外一些可能有用的信息是,当我在WinXP Pro上的Visual Studio 2010中在我的开发环境中构建解决方案时,它可以正常工作,但是当我将它发布到服务器(IIS 7.5,Server 2008 R2)时休息。起初我以为它可能是数据滞后,但服务器上的连接字符串应该比我的开发环境中的连接字符串更快。服务器使用Localhost作为目标,我的开发工作站使用服务器路径...所以我不认为它的数据滞后。

3 个答案:

答案 0 :(得分:5)

我有同样的问题。 我通过在asp:Menu控件下创建RenderingMode =“Table”来解决它。

示例:

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" RenderingMode="Table">
        <StaticMenuItemStyle CssClass="menuitem" />
        <DynamicMenuItemStyle CssClass="menuitem" />

你将不得不用css多一点(删除你的CSS中的'ul'和'li'属性)。

创建

 <StaticMenuItemStyle CssClass="menuitem" />
 <DynamicMenuItemStyle CssClass="menuitem" />

在菜单控件中(如上所示)也有助于css格式化。

由于某种原因,菜单列表正在创建此问题。这至少是一种解决方法。

答案 1 :(得分:2)

从Visual Studio 2010 / .NET 4.0开始,ASP:Menu呈现为项目符号列表(ul)而不是table。您必须拥有影响ul的CSS,它会覆盖菜单的预期设计。

答案 2 :(得分:2)

我遇到了同样的问题。事实证明这是由我的Global.asax文件中的以下行引起的:

RouteTable.Routes.MapPageRoute("", "{*dummy}", "~/Default.aspx")

我想将请求不存在路由的用户发送到Default.aspx页面。显然,这会产生不必要的副作用,浏览器无法找到水平渲染菜单所需的JS文件。