我有一个标签,我在其中显示数字,数字是来自数据库的数据计数。每当数据库中保存了新数据时,标签中的数字就会增加。当我刷新页面时,它会增加,因为我在codebehind中调用了page_load上的方法。
我的想法是:
- 我应该定期调用该方法,而不刷新页面
为此,我知道我应该使用AJAX,但我找不到合适的用法
你能告诉我一个解决方案吗?
这是aspx页面上的标签:
<div id="panoramCouponBarLittleTalep">
<asp:Label ID="LabelTalepSayisiSag" ClientIDMode="Static" Text="" runat="server" />
</div>
这是页面加载:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["user"] != null)
{
if (!IsPostBack)
{
SonBesGunTalepSayisi();
}
}
}
我使用的方法是:
private void SonBesGunTalepSayisi()
{
RequestProvider rP = new RequestProvider();
int talepSayisi = rP.LastFiveDaysRequestCount();
if (talepSayisi > 0)
{
LabelTalepSayisiSag.Text = talepSayisi.ToString();
}
else
{
LabelTalepSayisi.Text = "";
}
}
我会使用ASP.NET AJAX页面方法作为JavaScript AJAX将基于计时器调用的服务器端点;像这样:
代码背后:
[WebMethod]
public static string GetRequestCount()
{
RequestProvider rP = new RequestProvider();
int talepSayisi = rP.LastFiveDaysRequestCount();
if (talepSayisi > 0)
{
return talepSayisi.ToString();
}
return "";
}
我会在Label
控件中添加一个CssClass
值,因为这将使它更容易在jQuery选择器中使用,比如:
标记:
<div id="panoramCouponBarLittleTalep">
<asp:Label ID="LabelTalepSayisiSag" ClientIDMode="Static"
Text="" runat="server" CssClass="TheLabel" />
</div>
$(document).ready(function() {
setInterval(ajaxCall, 5000); // 5000 MS == 5 seconds
});
function ajaxCall() {
$.ajax({
type: "POST",
url: "PageName.aspx/GetRequestCount",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(result) {
// Put result of call into label
$('.TheLabel').text(result);
}
});
}
注意:很明显,您可以根据需要和性能将计时器间隔值调整为较大或较小。此外,Label
控件上的CssClass
值避免了困扰ASP.NET服务器控件的名称篡改问题。即使您正在使用ClientIDMode="Static"
,我也希望尽可能避免在jQuery中使用服务器控件的ID,因为类名不会被ASP.NET破坏。
您可以使用ASP页面方法:
http://www.geekzilla.co.uk/View7B75C93E-C8C9-4576-972B-2C3138DFC671.htm