【问题标题】:Asp.Net Static method to refresh pageAsp.Net 静态刷新页面的方法
【发布时间】:2010-09-16 13:49:14
【问题描述】:

我有一个页面每 5 秒访问一次网络服务以更新页面上的信息。我正在使用 Ajax Control Toolkit 中的 DynamicPopulateExtender 来使用一些文本填充面板。

我想做的是,如果满足某个条件,则完全刷新页面。

我能用我现有的方法做到这一点吗?这是我目前的东西:


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();
    }

【问题讨论】:

    标签: c# asp.net javascript static methods


    【解决方案1】:
    • 您无法通过 ASMX 执行任何操作。
    • 您可以通过 JavaScript 刷新页面,方法是使用传统的页面重新加载或执行执行服务器端更改的回发,然后通过 UpdatePanel 或更简单的 Response.Redirect 进行更新。

    【讨论】:

      【解决方案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>
      

      Default.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);
      
              }
          }
      }
      

      在客户端,在任何情况下,您都可以调用 forcePostback() Javascript 函数来强制回发。

      【讨论】:

      • 这很好,谢谢!执行重新加载会生成警告“Firefox 必须发送将重复之前执行的任何操作的信息......”。将其放入 nixed 警告并生成刷新。这是最少的代码,非常优雅。
      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 2011-01-06
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多