【问题标题】:Auto Refresh of a label text in ASP Masterpage without loading of entire page自动刷新 ASP Masterpage 中的标签文本而不加载整个页面
【发布时间】:2014-06-29 08:01:05
【问题描述】:

我在 ASP 母版页中有一个标签控件,其文本将加载到母版页的 Page_Load 上。

母版页:

<asp:label id="Label1"> </asp:label>

Master.cs 文件:

Protected void Page_load()
{
   Label1.text = " Data Refreshed at :" + getUpdatedTimestamp();
}

该标签表示数据库中数据刷新时的更新时间戳。我们通过函数 getUpdatedTimestamp() 访问 DB;

因此,如果用户导航到其他页面,那么当母版页再次加载时,我们将能够在母版页的 page_load 事件中访问数据库时获得更新的时间戳。

我的问题是:即使用户停留在同一页面而不导航到其他页面,是否有任何方法可以访问数据库并获取更新的时间戳。

注意:我已尝试在母版页中更新面板并将触发器设置为命中 DB,但为此我需要将脚本管理器添加到母版页。我已经拥有所有内容页面的脚本管理器,但无法将脚本管理器添加到母版页。所以,这个选项被排除了。

有人可以建议我完成这项工作的合适方法吗?!!!

我还尝试了 javascript function setinterval() 来完成这项工作,但在 javascript 函数中调用服务器端函数时卡住了。

【问题讨论】:

  • 显示您使用 javascript 和 ajax 尝试的代码

标签: javascript asp.net asp.net-ajax


【解决方案1】:

使用脚本管理器只更新一个小标签可能会导致从服务器传输数据的开销。

我建议使用客户端 javascript,它会每隔一段时间调用服务器端 WebMethod。

在您的 ASPX.CS 页面上创建一个 WebMethod:

    [System.Web.Services.WebMethod]
    public static string GetCurrentTime()
    {
        return DateTime.Now.ToString();
    }

在客户端代码中使用 jQuery AJAX 调用获取服务器 WebMethod,并在标签中显示服务器响应:

<html>
    <head runat="server">
        <enter code here!-- jQuery required -->
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <script type="text/javascript">
            function ShowCurrentTime() {
                // Ajax call to YOUR_PAGE.aspx/GetCurrentTime
                $.ajax({
                    type: "POST",
                    url: "Default.aspx/GetCurrentTime", // Change Default.aspx to your ASPX page name, and GetCurrentTime to your server-side WebMethod name
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: OnSuccess // OnSuccess method is called when AJAX request receives the data from the server
                });
            }

            function OnSuccess(response) {
                // The response will contain JSON object like {"d":"29.6.2014 13:21:47"},
                // so the actual data is response.d
                $("#lblCurrentTime").text(response.d); // Fill our SPAN label with the data. 
            }

            $(function () {
                // Call every 1000 miliseconds
                window.setInterval(ShowCurrentTime, 1000);
            });
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <!-- LABEL TO SHOW CURRENT TIME -->
            <span id="lblCurrentTime"></span>
        </form>
    </body>
</html>

就是这样。这样,从服务器传输的数据将尽可能少。调用服务器端 WebMethod 不会像标准回发那样对服务器产生很大的性能影响,因为 WebMethod 避免了标准页面生命周期事件。

更多信息:

http://www.aspsnippets.com/Articles/Call-ASPNet-Page-Method-using-jQuery-AJAX-Example.aspx

http://msdn.microsoft.com/en-us/library/byxd99hx(v=vs.90).aspx

【讨论】:

  • 嗨。 .非常感谢您的方法,我也这样做了。但我在这里的问题是“我们可以在母版页中调用该方法吗?”.......我的意思是,url:“EMARMaster.Master/GetUpdatedTimestamp”,它可以像这样而不是 aspx 吗?因为当我在函数的 master.cs 文件中插入断点时,它并不是在每个时间间隔都命中。但是,如果如果每 setinterval 10 秒用简单的 Alert("Hi") 替换整个方法,它就会起作用。希望你能得到我需要的东西..!!!!!!提前致谢。
  • AFAIK 您可以在母版页中使用 WebMethod。如果您需要从多个网页调用特定的 Web 方法,最好的方法是创建 ASMX(Web 服务)文件而不是 ASPX(例如 MasterWebService.asmx),并将与我相同的 [WebMethod] 函数复制到其中为 ASPX 解释。然后在javascript中使用url调用ajax:“MasterWebService.asmx/GetUpdatedTimestamp”。欲了解更多信息,请阅读asp.net/web-forms/tutorials/aspnet-ajax/… 中的前 3 章。与 ASPX 相比,ASMX 文件为托管 Web 服务提供了更好的性能。
【解决方案2】:

您必须将标签放在 UpdatePanel 中,这样您就可以在不重新加载整个页面的情况下更新标签。 如果你已经这样做了,你需要设置一个触发器来执行一个动作(在你的情况下更新时间戳)

【讨论】:

  • 嗨。 .非常感谢您的方法。 .但我无法在母版页中添加脚本管理器(由于更新面板),因为我所有的子页面都有脚本管理器。!!!
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 2013-02-22
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多