2013-05-13 4 views
0

У меня есть страница в ASP.NET, на которой есть некоторые обновления. После того, как страница загрузится, я хочу, чтобы обновляемые панели активировали обновляемые панели обновлений.Как получить событие ASP.NET page_load для запуска обновления AJAX UpdatePanel

Я работаю, используя this ответ, который говорит, чтобы поставить этот Javascript на страницу.

$(document).ready(function() { 
    window.__doPostBack('<%= hiddenAsyncTrigger.ClientID %>', 'OnClick'); 
}); 

Однако, это вызывает событие щелчка, чтобы быть спамом еще потому, что событие нагрузки запуска antoher нагрузки ... ??

The обновления панели все функции отлично, проблема с запуска обновления происходят раз после загрузки страницы

ответ

0

Законченное решение это с J avascript запуская скрытую кнопку в UpdatePanel

JS

var timer; 
var polling_interval = 30000; 

$(document).ready(function() { 
    TriggerUpdatePanelUpdate();// update as soon as DOM is ready 
    StartPolling(); 
}); 

function StartPolling() { 
    PollLoop(); 
} 

function StopPolling() { 
    clearTimeout(timer); 
} 

function PollLoop() { 
    timer = setTimeout(
     function() { 
      TriggerUpdatePanelUpdate(); 
      PollLoop(); 
     }, 
     polling_interval 
    ); 
} 

function TriggerUpdatePanelUpdate() { 
    document.getElementById('hiddenAsyncTrigger').click(); 
} 

HTML

<asp:Button ID="hiddenAsyncTrigger" runat="server" OnClick="DoWork" Text="AsyncUpdate" style="display: none;"/> 
1

Используйте контроль на стороне клиента, а не на стороне сервера:

<%@ Page Language="C#" %> 
<script runat="server"> 
    protected string CurrentTime() 
    { 
    return DateTime.Now.ToString(); 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    <title>Untitled Page</title> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script language="JavaScript"> 
     $(document).ready(function() { 
     $("#Updater").click() 
     }); 
    </script> 
    </head> 

    <body> 
    <form id="MyForm" runat="server"> 
     <div> 
     Outside the panel: <%=CurrentTime() %> 
     </div> 
     <br /> 
     <br /> 
     <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" /> 
     <asp:UpdatePanel ID="panel" runat="server" UpdateMode="conditional"> 
     <ContentTemplate> 
      <div> 
      Inside the panel: <%=CurrentTime() %> 
      </div> 
      <input type="submit" id="Updater" style="display: none" /> 
     </ContentTemplate> 
     </asp:UpdatePanel> 
    </form> 
    </body> 
</html> 

Другое решение - без скрытого запуска, используя __doPostBack

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplicationTest.WebForm1" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>Untitled Page</title> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script language="JavaScript"> 
     $(document).ready(function() { 
      __doPostBack('panel', ''); 
     }); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      Outside the panel: <%=CurrentTime() %> 
     </div> 
     <br /> 
     <br /> 
     <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" /> 
     <asp:UpdatePanel ID="panel" runat="server" UpdateMode="conditional"> 
      <ContentTemplate> 
       <div> 
        Inside the panel: <%=CurrentTime() %> 
       </div> 
       <input type="submit" id="Updater" style="display: none" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </form> 
</body> 
</html> 

using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebApplicationTest 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected string CurrentTime() 
     { 
      System.Diagnostics.Debug.WriteLine("CurrentTime was called"); 
      return DateTime.Now.ToString(); 
     } 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      System.Diagnostics.Debug.WriteLine("PageLoad was called"); 
     } 
    } 
} 
+0

Первое решение обыкновение быть асинхронной, потому что вы стил lhave ждать CurrentTime) для запуска (? – SkeetJon

+0

То же самое для второго решения, потому что метод <% = CurrentTime()%> вызывается в Page_Load. Я думаю, что мне не хватает чего-то – SkeetJon

+0

@SkeetJon - панели обновления выполняют асинхронный обратный вызов через JavaScript. Первые два вызова <% = CurrentTime()%> не являются асинхронными, но существуют только для этой демонстрации и на самом деле не нужны. Не стесняйтесь удалять их. –