Горизонтальное меню asp.net отображается как вертикальный список
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' является нулевым или не является объектом
<script type='text/javascript'>new Sys.WebForms.Menu({ element: 'ctl00_NavigationMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false });</script>
Произошла ошибка
'Sys.Webforms.Menu' является нулевым или не является объектом
Я считаю, что оставшиеся ошибки - это каскады этих двух. Как вы думаете, я должен заменить библиотеки jscript на обновленные? Возможно, это связано с браузером, так как я использую IE8 (не в режиме совместимости).
Еще одна странная информация, которая может помочь, заключается в том, что когда я собираю решение в Visual Studio 2010 для WinXP Pro в своей среде разработки, оно работает нормально, но когда я публикую его на сервере (IIS 7.5, Server 2008 R2), оно ломается. Сначала я подумал, что это может быть задержка данных, но строка подключения на сервере должна быть быстрее, чем строка подключения в моей среде разработки. Сервер использует Localhost в качестве цели, моя рабочая станция использует путь к серверу... поэтому я не думаю, что это задержка данных.
3 ответа
У меня такая же проблема. Это оказалось вызвано следующей строкой в моем файле Global.asax:
RouteTable.Routes.MapPageRoute("", "{*dummy}", "~/Default.aspx")
Я хотел отправить пользователей, запрашивающих несуществующие маршруты, на страницу Default.aspx. По-видимому, это имеет нежелательный побочный эффект: браузер не может найти JS-файл, необходимый для горизонтального отображения меню.
У меня была такая же проблема. Я решил это, сделав RenderingMode="Table" под элементом управления asp:Menu.
Пример:
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" RenderingMode="Table">
<StaticMenuItemStyle CssClass="menuitem" />
<DynamicMenuItemStyle CssClass="menuitem" />
Вам придется немного поиграться с css (удалив атрибуты 'ul' и 'li' в вашем css).
Создание
<StaticMenuItemStyle CssClass="menuitem" />
<DynamicMenuItemStyle CssClass="menuitem" />
В управлении меню (как показано выше) также помогает с форматированием CSS.
По какой-то причине список меню создает эту проблему. Это как минимум обходной путь.
Начиная с Visual Studio 2010 /.NET 4.0, ASP:Menu
s отображаются в виде маркированных списков (ul
) скорее, чем table
s. Вы должны иметь CSS, который влияет ul
s, который переопределяет ожидаемый дизайн меню.