为什么我会得到一个随机的';事件';是ASP中未定义的错误.NET菜单控件
本文关键字:ASP 事件 未定义 错误 控件 菜单 NET 一个 为什么 随机 | 更新日期: 2023-09-27 18:11:57
这已经困扰我一段时间了。
我的应用程序中有一个页面是内容页面。asp.net主页有一个菜单控件。
此菜单控件是一个用户控件,它包含一个对象,以及基于用户将菜单绑定到各种站点地图文件的所有事件处理。
内容页面有一个包含各种表单的表单和带有更新面板的网格,用于将复杂对象组合在一起。完成后,用户提交表单,并创建新对象。
问题是,当更新其中一个网格视图或提交表单时,我从ScriptResource.axd文件中得到一个"Event"is undefined错误,看起来代码来自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文件中的周围代码看起来像菜单代码。
第2版(可复制!(:好的,更多细节。如果页面加载后将鼠标悬停在菜单控件上,就会出现此错误。如果我不悬停,它就不会发生,而且一切都很好。如果我将鼠标悬停,它将在下一篇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>
将其添加到菜单所在的页面可以消除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
我会尝试将每个控件包含在它自己的UpdatePanel
中,其中包含UpdateMode=Conditional
,并在需要时显式包含特定于Update
的内容。如果您需要重新加载整个页面,请继续进行硬刷新以恢复状态。
我没能想出解决方案,所以我选择了不同的菜单。
Queness下拉菜单是最简单的实现方式,具有类似的功能和风格。
解决方案很简单:ScriptResource.axd文件中的Event对象被javascript文件中的另一个同名对象覆盖。我遇到了同样的问题,并用这个解决方案解决了它。
致以最良好的问候。