如何在asp.net的初始页面加载中触发UpdateProgress

时间:2014-02-28 14:49:35

标签: c# javascript asp.net asp.net-ajax updatepanel

问题: 为什么我的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
        }
    }

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

最后我觉得我找到了它:

#include<stdio.h>
#include<string.h>

    int main()
    {
            FILE *ptr_file;
            char buf[1000];
        char output[];
            ptr_file =fopen("CodeSV.txt","r");
            if (!ptr_file)
                return 1;   

        while (fgets(buf,1000, ptr_file)!=NULL)
            strcat(output, buf);
        printf("%s",output);

    fclose(ptr_file);

    printf("%s",output);
        return 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>

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