我在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函数中遇到了调用服务器端函数的问题。
答案 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中,这样您才能更新标签而无需重新加载整个页面。 如果您已经这样做,则需要设置触发器来执行操作(在您的情况下更新时间戳)