2013-02-28 141 views
1

当我尝试在第一个完成之前在firefox中的sharepoint 2013上的UpdatePanel中执行第二个xmlhttprequest时,我得到整个页面刷新。 第一个请求状态被中止。 第二请求的响应为: 1 |#|| 4 | 97 | pageRedirect ||%2f_login%2fdefault.aspx%3fReturnUrl%3D%252fsites%252ftest%252fPages%252fUpdatePanelTest.aspx |页面刷新后,在UpdatePanel上发布Sharepoint 2013发布页面

该错误可以通过附加代码进行复制(快速点击按钮两次会产生错误)。

只有当我把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

你故意要允许用户提交回发请求,而已经有打算请求上?如果这是无意的,则可能需要考虑在服务器端方法运行时禁用用户控件。这可以通过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>