当我尝试在第一个完成之前在firefox上的sharepoint 2013上的UpdatePanel中执行第二个xmlhttprequest时,我得到整个页面刷新。 第一个请求状态为Aborted。 第二个请求响应是: 1 |#|| 4 | 97 | pageRedirect ||%2f_login%2fdefault.aspx%3fReturnUrl%3D%252fsites%252ftest%252fPages%252fUpdatePanelTest.aspx |
使用附带的代码可以重现此错误(快速单击按钮两次会产生错误)。
仅当我将带有此控件的Web部件放在Sharepoint 2013上的发布页面上时,才会出现此问题。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestUpdatePanel.ascx.cs"
Inherits="Example.TestUpdatePanel" %><asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<asp:CheckBoxList runat="server" ID="CheckboxList1" AutoPostBack="true">
<asp:ListItem Text="CheckBox1" Value="valueFromCheckBox1" />
<asp:ListItem Text="CheckBox2" Value="valueFromCheckBox2" />
<asp:ListItem Text="CheckBox3" Value="valueFromCheckBox3" />
<asp:ListItem Text="CheckBox4" Value="valueFromCheckBox4" />
<asp:ListItem Text="CheckBox5" Value="valueFromCheckBox5" />
</asp:CheckBoxList>
</ContentTemplate></asp:UpdatePanel><asp:UpdatePanel ID="UpdatePanel2" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="CheckboxList1" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />
<br />
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
</ContentTemplate></asp:UpdatePanel>
protected void Page_Load(object sender, EventArgs e)
{
CheckboxList1.SelectedIndexChanged += CheckboxList1_SelectedIndexChanged;
}
private void CheckboxList1_SelectedIndexChanged(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
Label3.Text = CheckboxList1.SelectedValue;
}
protected void Button1_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
Label1.Text = "Button1_Click";
}
protected void Button2_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
Label2.Text = "Button2_Click";
}
答案 0 :(得分:0)
您是否有意在允许用户提交请求的同时提交回发请求?如果这是无意的,您可能需要考虑在服务器端方法运行时禁用用户控件。这可以使用UpdateProgress控件完成。我们的想法是,您可以使用此控件弹出一个覆盖整个应用程序的div,同时发生回发。它可以像这样使用:
<asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel1" runat="server" >
<ProgressTemplate >
<div id="wait" style="width:100%; height:100%;
position:absolute; top:0; left:0; z-index:1000;background-color: #666699;
filter: alpha(opacity=80); text-align:center; vertical-align:middle;">
<div style="border:5px solid black; width:200px; height:50px;
background- color:White; top:50%; position:absolute;">
Saving changes. Please wait...
</div>
</div>
</ProgressTemplate>
</asp:UpdateProgress>
答案 1 :(得分:0)
默认情况下,更新面板在SP 2013中不起作用。您必须按照以下文章进行修复: