我有一个asp.net网页,有两个按钮。它们位于两个不同的update panels
中,并更新两个不同的文本框。
我首先点击第一个按钮,等待5秒钟,然后点击第二个按钮。我所期望的结果是两个文本框都有价值 - 但只有一个有。
问题
MARKUP
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxTest.aspx.cs" Inherits="MyUI.AjaxTest"
EnableSessionState="False" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<!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">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="scrSubscribers" runat="server" />
<div>
<div style="border-style: solid; border-color: #00FFFF">
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Always">
<ContentTemplate>
<div class="firstTextBox">
<asp:TextBox ID="txtAssociateName" runat="server" Width="150px" MaxLength="81" TabIndex="1"></asp:TextBox>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<asp:UpdatePanel ID="UpdatePanel4" runat="server" UpdateMode="Always">
<ContentTemplate>
<div class="firstTextBox">
<asp:TextBox ID="txtDepartment" runat="server" Width="150px" MaxLength="81" TabIndex="1"></asp:TextBox>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<br />
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load" UpdateMode="Conditional">
<ContentTemplate>
<div id="searchValues" class="searchValuesDiv">
<div id="searchLine1" class="searchLine">
</div>
<div id="searchLine5" class="searchLine">
<div class="btnSearchDiv">
<asp:Button ID="btnFirst" class="btnSearch" runat="server" OnClick="SearchSubscribersClick"
Text="FirstButton" ValidationGroup="Search" />
<asp:TextBox ID="txtFirstDate" runat="server" Width="150px" MaxLength="81" TabIndex="1"></asp:TextBox>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<br />
<asp:UpdatePanel ID="UpdatePanel2" runat="server" OnLoad="UpdatePanel1_Load" UpdateMode="Conditional">
<ContentTemplate>
<div id="Div1" class="searchValuesDiv">
<div id="Div3" class="searchLine">
<div class="btnSearchDiv">
<asp:Button ID="btnSecond" class="btnSearch" runat="server" OnClick="SecondClick"
Text="SecondButton" ValidationGroup="Search" />
<asp:TextBox ID="txtSecondDate" runat="server" Width="150px" MaxLength="81" TabIndex="1"></asp:TextBox>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<asp:HiddenField ID="hdnSearchClickStatus" runat="server" Value="Blank Value" />
</div>
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script src="Scripts/ExpandableSearchResultScript.js" type="text/javascript"></script>
</form>
</body>
</html>
代码背后
protected void SearchSubscribersClick(object sender, EventArgs e)
{
Thread.Sleep(10000);
txtAssociateName.Text = "A_"+ DateTime.Now.ToString();
}
protected void SecondClick(object sender, EventArgs e)
{
Thread.Sleep(10000);
txtDepartment.Text = "B_" + DateTime.Now.ToString();
}
RESULT
答案 0 :(得分:1)
发出新请求时,任何AJAX请求都会被取消。这不是来自MSDN。这就是AJAX请求的工作方式。
答案 1 :(得分:0)
答案可以来自问题ASP.NET AJAX using UpdatePanels
@Sergey评论:
UpdatePanel的请求仍在整个页面生命周期中运行。因此,存在与每个请求相关联的状态数据。这就是为什么两个请求不能同时为同一个会话运行的原因。作为Jquery ajax请求命中无状态静态方法。
@Dave Ward回答:
UpdatePanel的异步回发仍然只是:回发。如果允许并行发生多个回发,则他们的新ViewState通常会彼此不同步。然后,下一个回发将抛出一个ViewState验证错误和/或在第三次回发完成后,其中一个回发对Page的状态的修改将会丢失。
另一方面,页面方法和Web服务调用不受WebForms ViewState或页面生命周期的阻碍。因此,由于浏览器的同时请求限制允许(通常为4-8,但在IE6等某些浏览器中仅为2),因此许多可能并行发生。