在ASP主页面中自动刷新标签文本而不加载整个页面

时间:2014-06-29 08:01:05

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

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

母版页:

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

Master.cs文件:

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

此Label表示在数据库中刷新数据时更新的时间戳。我们按函数getUpdatedTimestamp();

命中DB

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

我的问题是:有没有办法点击数据库并获得更新的时间戳,即使用户停留在同一页面而不导航到其他页面。

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

有人可以建议我采用合适的方法来完成这项工作。!!!

我还尝试了javascript function setinterval()来完成这项工作,但在javascript函数中遇到了调用服务器端函数的问题。

2 个答案:

答案 0 :(得分:0)

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

我建议使用客户端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

答案 1 :(得分:0)

您必须将标签放在UpdatePanel中,这样您才能更新标签而无需重新加载整个页面。 如果您已经这样做,则需要设置触发器来执行操作(在您的情况下更新时间戳)