Почему я получаю случайное сообщение «Событие» - неопределенная ошибка в элементе управления ASP.NET при несвязанном обновлении панели обновлений? - PullRequest
1 голос
/ 19 октября 2011

Это мучило меня некоторое время.

В моем приложении есть страница, которая является страницей содержимого. На главной странице asp.net есть элемент управления меню.

Этот элемент управления меню представляет собой пользовательский элемент управления, который содержит объект и всю обработку событий для привязки меню к различным файлам карты сайта в зависимости от пользователя.

Страница содержимого имеет форму с различными формами и сетками с панелями обновления для объединения сложного объекта. По завершении пользователь отправляет форму, и он должен создать новый объект.

Проблема заключается в том, что при обновлении одного из видов сетки или отправке формы я получаю сообщение об ошибке «Событие» - неопределенная из файла ScriptResource.axd, и похоже, что код взят из элемента управления ASP. Вот контекст, в котором происходит ошибка. Он ломается сразу после Menu_ClearInterval ():

function Menu_HideItems(items) {
if (document.body.__oldOnClick) {
    document.body.onclick = document.body.__oldOnClick;
    document.body.__oldOnClick = null;
}
Menu_ClearInterval();

разрывается на этой строке:

if (!items || ((typeof(items.tagName) == "undefined") && (items instanceof Event))) {

    items = __rootMenuItem;
}
var table = items;
if ((typeof(table) == "undefined") || (table == null) || !table.tagName || (table.tagName.toLowerCase() != "table")) {
    table = WebForm_GetElementByTagName(table, "TABLE");
}
if ((typeof(table) == "undefined") || (table == null) || !table.tagName || (table.tagName.toLowerCase() != "table")) {
    return;
}
... rest of function
}

Контекст для функции имеет переменную items, которая выглядит так, как будто содержит данные о событиях, например:

{ type: "click", target: { id: "btnAddItem" }, Methods: stopPropagation() }

Не уверен, что это важно. Все остальные местные жители в настоящее время не определены.

У кого-нибудь была такая проблема раньше? Любая помощь приветствуется. Это производственная проблема, и если не считать ее переписывания для использования чистого jquery и ajax (не быстрое решение), я не уверен, что еще делать.

Заранее спасибо за помощь!

РЕДАКТИРОВАТЬ: Чтобы было ясно, я не уверен, что это элемент управления меню, вызывающий ошибку, только то, что окружающий код в файле ScriptResource.axd выглядит как код меню.

EDIT2 (Воспроизводимый!): Хорошо, более подробно. Эта ошибка возникает, если я наведите курсор мыши на элемент управления меню после загрузки страницы. Если я не парить, это не произойдет, и все работает нормально. Если я наведите курсор мыши, это приведет к ошибке в следующем сообщении ajax. Эта страница помогла мне понять это. Мысли?

Разметка меню:

  <asp:Menu ID="mainMenu" runat="server" Orientation="Horizontal" OnMenuItemDataBound="mainMenu_MenuItemDataBound">
    <StaticMenuStyle CssClass="menu" />
    <StaticMenuItemStyle CssClass="menuItem" />
    <StaticSelectedStyle CssClass="menuSelected" />
    <StaticHoverStyle CssClass="menuHover" />     
    <DynamicMenuItemStyle CssClass="menuItem dMenuItem" />
    <DynamicSelectedStyle CssClass="menuSelected dMenuSelected" />
    <DynamicHoverStyle CssClass="menuHover dMenuHover" />            
    <LevelSubMenuStyles>
        <asp:SubMenuStyle CssClass="menu" />
        <asp:SubMenuStyle CssClass="subMenu" BackColor="#DDDDDD" />
    </LevelSubMenuStyles>
    <LevelMenuItemStyles>
        <asp:MenuItemStyle CssClass="menuItem" />
        <asp:MenuItemStyle CssClass="subMenuItem" />
    </LevelMenuItemStyles>
    <DataBindings> 
        <asp:MenuItemBinding DataMember="siteMapNode" 
             TextField="title" NavigateUrlField="url"  /> 
    </DataBindings> 
</asp:Menu>

Ответы [ 4 ]

1 голос
/ 20 июня 2012

Добавление его на страницу, где находится меню, устраняет ошибку javascript.

var oldMenu_HideItems = Menu_HideItems;   
if(oldMenu_HideItems)
{
    Menu_HideItems = function(items)
    {
        try
          {
            return oldMenu_HideItems(items);
          }
        catch(err)
          {

          }
    }
} 

Источник на http://forums.asp.net/t/1059668.aspx

0 голосов
/ 22 октября 2011

Мне не удалось найти решение этой проблемы, поэтому я в итоге выбрал другое меню.

Раскрывающееся меню Queness было самым простым для реализации с подобнымфункциональность и стиль.

0 голосов
/ 22 февраля 2012

Решение простое: объект Event из файла ScriptResource.axd перезаписывается другим объектом с таким же именем где-то в ваших файлах javascript. Та же проблема, что у меня была, и решить ее с помощью этого решения.

С уважением.

0 голосов
/ 19 октября 2011

Я бы попытался содержать каждый элемент управления в своем собственном UpdatePanel с UpdateMode=Conditional и явно Update конкретным контентом, когда это необходимо. Если вам требуется перезагрузить всю страницу, сделайте резкое обновление, чтобы восстановить состояние.

...