Asp.net Page_load触发两次UpdatePanel刷新,同时在下拉列表中有一个jQuery绑定的更改事件
我试图用下面一个完整的例子来总结我的问题——最初的问题是我正在编写的jQuery插件的一部分,该插件是为了扩展我已经拥有的ASP.NET ajax应用程序的行为 下面的aspx页面有一个下拉列表,标记为自动回发。我还使用jquery绑定了一个更改事件,最终我将交换一个.live事件,以在更新面板刷新后维护绑定。问题是,当jQuery事件绑定时,我看到两个ajax begin请求和页面加载触发,但只有一个ddlTest\u OnselectedIndexChanged事件。其中一个页面加载的格式也不正确-内容长度表示大约300字节长,而totalBytes为0,表单数据为空。如果绑定到按钮的单击事件,则不会发生这种情况 有人能解释一下为什么错误的页面加载事件被触发吗Asp.net Page_load触发两次UpdatePanel刷新,同时在下拉列表中有一个jQuery绑定的更改事件,asp.net,jquery,ajax,Asp.net,Jquery,Ajax,我试图用下面一个完整的例子来总结我的问题——最初的问题是我正在编写的jQuery插件的一部分,该插件是为了扩展我已经拥有的ASP.NET ajax应用程序的行为 下面的aspx页面有一个下拉列表,标记为自动回发。我还使用jquery绑定了一个更改事件,最终我将交换一个.live事件,以在更新面板刷新后维护绑定。问题是,当jQuery事件绑定时,我看到两个ajax begin请求和页面加载触发,但只有一个ddlTest\u OnselectedIndexChanged事件。其中一个页面加载的格式也
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Diagnostics" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<script runat="server">
private void Page_Load(object sender, EventArgs e)
{
Debug.WriteLine(Request.Headers["Content-Length"]);
Debug.WriteLine(Request.TotalBytes);
Debug.WriteLine(Request.Form.ToString());
Debugger.Break();
}
private void ddlTest_OnSelectedIndexChanged(object sender, EventArgs e)
{
Debugger.Break();
}
</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequestHandler);
$("#<%=ddlTest.ClientID%>").change(function() { alert('jQuery binding fired'); });
});
function beginRequestHandler() {
alert("Started ajax call");
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="SciptManager" runat="server" />
<asp:UpdatePanel ID="updTest" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="ddlTest" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlTest_OnSelectedIndexChanged" >
<asp:ListItem>First</asp:ListItem>
<asp:ListItem>Second</asp:ListItem>
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
更新:我已经进一步缩小了问题的范围。当IE出现问题时,Firefox和Chrome都能正常工作。我还将错误代码简化为下面的示例。很难相信这么简单,但是下拉列表中的jQuery.change方法会触发select元素上的onchange事件两次!我会寻找其他有这个问题的人,并报告我的发现
<%@ Page Language="C#" AutoEventWireup="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$('#ddlTest').change(function() { alert('jQuery event fired'); });
});
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:DropDownList id="ddlTest" runat="server" onchange="alert('element event');">
<asp:ListItem Text="First" />
<asp:ListItem Text="Second" />
</asp:DropDownList>
</form>
</body>
</html>
调用$.change。。。可能会触发您的下拉列表,并且由于您的自动回发,您的页面会再次刷新。看起来我在最新版本的jQuery中发现了一个bug:。如果我把测试改回1.3.2版,它就可以正常工作了!我还发现了一个对jQuery引发的问题的引用。去掉autopostback=true=它正在触发一个回发,而更改事件是另一个。我已经为我的问题添加了一个更新-我相信你是对的,但我想知道我是否做错了什么,或者可以做些不同的事情来避免IE中的双重触发?@Phil不确定我有权:。在javascript中,函数集同时调用函数。所以它只需要一些测试,看看是否是这种情况。