2014-02-28 162 views
1

問題: 爲什麼我的UpdateProgress在初始頁面加載過程中不顯示,而是通過按鈕單擊進行後續回發?如何在asp.net初始頁面加載時觸發UpdateProgress

我設法得到這個工作的唯一方法是用一個計時器,我並不熱衷於此。有另一種方法嗎?

有人能解釋爲什麼doSearch()會導致updateprogress通過按鈕點擊工作,而不是通過docoment準備好的頁面加載工作?

代碼:

的js處理程序:

<script> 
    $(document).ready(doSearch); 

    function doSearch() { 
     $('#<%= UpdatePanel1Trigger.ClientID %>').click(); 
     return false; 
    } 
</script> 

ASPX:

//if i click this button the updateprogress works 
//and the panel loads 
<asp:Button ID="btnSearch" runat="server" Text="Search" CssClass="form-control" 
OnClientClick="return doSearch();" /> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" 
    OnLoad="UpdatePanel1_Load" ChildrenAsTriggers="true"> 
    <ContentTemplate> 
     <asp:Button ID="UpdatePanel1Trigger" runat="server" 
       style="display:none" OnClick="UpdatePanel1Trigger_Click" /> 
     <%--gridview that takes a while to load--%> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:UpdateProgress ID="UpdateProgress1" runat="server" 
    AssociatedUpdatePanelID="UpdatePanel1" DisplayAfter="1"> 
    <ProgressTemplate> 
     <asp:Image ID="imgUpdateProgress1" runat="server" 
     ImageUrl="~/Images/spinner.gif" AlternateText="Loading ..." ToolTip="Loading ..."/> 
    </ProgressTemplate> 
</asp:UpdateProgress> 

代碼隱藏:

protected void UpdatePanel1Trigger_Click(object sender, EventArgs e) 
    { 
     if (!String.IsNullOrEmpty(m_search)) 
     { 
      performSearch(); //loads data for gridview in updatepanel 
     } 
    } 

回答

0

能如此用一種方式來處理jQuery庫干擾MS AJAX庫。試圖迫使它顯示:

<script> 
    $(document).ready(function() { 
     $('#<%= UpdateProgress1.ClientID %>').show();  
     doSearch(); 
    }); 

    function doSearch() { 
     $('#<%= UpdatePanel1Trigger.ClientID %>').click(); 
     return false; 
    } 
</script> 

作爲替代方案,而不是jQuery的$(document).ready嘗試使用MS方法:

<script> 
    Sys.Application.add_load(doSearch); 

    function doSearch() { 
     $('#<%= UpdatePanel1Trigger.ClientID %>').click(); 
     return false; 
    } 
</script> 
+0

謝謝您的回覆,第一種方法與我目前的方法相同(除非它顯示按鈕,直到面板加載)。第二個沒有加載任何東西(沒有點擊按鈕)。 –

0

最後,我想我找到它:

<%@Page Language="VB" AutoEventWireup="false" 
     CodeFile="prueba.aspx.vb" Inherits="Programación_prueba" %> 
<!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 id="Head1" runat="server"> 
    <title>UpdatePanel Example</title> 
</head> 
<body> 
<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"/> 
    <asp:UpdateProgress runat="server" ID="PageUpdateProgress"> 
    <ProgressTemplate> 
     Loading... 
    </ProgressTemplate> 
    </asp:UpdateProgress> 
    <asp:UpdatePanel runat="server" ID="Panel"> 
    <ContentTemplate> 
     <asp:Button runat="server" ID="UpdateButton" OnClick="UpdateButton_Click" Text="Update"/> 
     <asp:Timer runat="server" ID="UpdateTimer" Interval="5000" OnTick="UpdateTimer_Tick"/> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger controlid="UpdateTimer" eventname="Tick"/> 
    </Triggers> 
    </asp:UpdatePanel> 
</form> 
</body> 
</html> 

這是後面的代碼:

Partial Class Programación_prueba 
    Inherits System.Web.UI.Page 

    Protected Sub UpdateButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UpdateButton.Click 
     System.Threading.Thread.Sleep(3000) 
    End Sub 

    Protected Sub UpdateTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles UpdateTimer.Tick 
     Me.UpdateButton_Click(Me.UpdateButton, Nothing) 
    End Sub 
End Class 

非常感謝所有的想法。 Aurelio J. Maldonado

+0

你能解釋一下你改變了什麼(以及爲什麼)? – Zeek

相關問題