Asp.Net Статический метод обновления страницы

#c# #asp.net #javascript #static #methods

Вопрос:

У меня есть страница, которая каждые 5 секунд обращается к веб-сервису, чтобы обновить информацию на странице. Я использую DynamicPopulateExtender из набора инструментов управления Ajax, чтобы просто заполнить панель некоторым текстом.

Что я хотел сделать, так это, если будет выполнено определенное условие, полностью обновить страницу.

Смогу ли я сделать это в текущем методе, который у меня есть? вот мои текущие вещи:


ASP.NET

 <cc1:DynamicPopulateExtender ID="DynamicPopulateExtender1" runat="server"
ClearContentsDuringUpdate="true" TargetControlID="panelQueue" BehaviorID="dp1"
ServiceMethod="GetQueueTable" UpdatingCssClass="dynamicPopulate_Updating" />
 

Язык JavaScript

 Sys.Application.add_load(function(){updateQueue();});

    function updateQueue()
    {
        var queueShown = document.getElementById('<%= hiddenFieldQueueShown.ClientID %>').value;

        if(queueShown == 1)
        {
            var behavior = $find('dp1');
            if (behavior)
            {
                behavior.populate();                    
                setTimeout('updateQueue()', 5000);
            }
        }
    }
 

СЕРВЕР (C#)

 [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public static string GetQueueTable()
    {
        System.Text.StringBuilder builder = new System.Text.StringBuilder();

        try
        {
             // do stuff
        }
        catch (Exception ex)
        {
             // do stuff
        }

        return builder.ToString();
    }
 

Ответ №1:

  • Вы ничего не можете сделать со своим ASMX.
  • Вы можете обновить страницу с помощью JavaScript, используя обычную перезагрузку страницы или выполнив обратную передачу, которая выполнит изменения на стороне сервера, а затем обновит ее с помощью панели обновления или, проще говоря, ответа.Перенаправлять.

Ответ №2:

Вы можете принудительно отправить обратную передачу из Javascript, см. Пример на этой странице Default.aspx:


По умолчанию.aspx

 <html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>

    <script type="text/javascript" language="javascript">
        function forcePostback()
        {
            <%=getPostBackJavascriptCode()%>;
        }
    </script>

</head>

<body onload="javascript:forcePostback()">
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="Postbacking right now..."></asp:Label>
    </div>
    </form>
</body>
</html>
 

По умолчанию.aspx.cs

 namespace ForcingApostback
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) Label1.Text = "Done postbacking!!!";
        }

        protected string getPostBackJavascriptCode()
        {
            return ClientScript.GetPostBackEventReference(this, null);

        }
    }
}
 

На стороне клиента при любых условиях вы можете вызвать функцию Javascript forcePostback() для принудительной обратной передачи.

Комментарии:

1. Это здорово, спасибо! При перезагрузке генерируется предупреждение «Firefox должен отправить информацию, которая повторит любое действие, выполненное ранее…». При этом предупреждение отменяется и генерируется обновление. Это минимальный код, действительно элегантный.