无需刷新asp.net中的页面即可立即获取消息/通知

时间:2013-11-21 15:49:04

标签: c# asp.net asp.net-ajax

我有一个标签,我显示数字,数字是数据库中的数据计数。每当新数据保存在DB中时,标签中的数字应该增加。当我刷新页面时它会增加,因为我在codebehind中调用page_load上的方法。

我的想法是:

  • 我应定期调用该方法而不刷新页面。

为此目的,我知道我应该使用AJAX,但我找不到合适的用法。

你能指导我一个解决方案吗?

这是aspx页面上的标签:

   <div id="panoramCouponBarLittleTalep">
      <asp:Label ID="LabelTalepSayisiSag" ClientIDMode="Static" Text="" runat="server" />
   </div>

这是page_load:

 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 = "";
        }
    }

2 个答案:

答案 0 :(得分:1)

我会使用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 "";
}

我会在CssClass控件中添加Label值,因为这样可以更轻松地在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);
        }
    });
}

注意:显然,您可以根据需要和性能将定时器间隔值调整为更大或更小。此外,CssClass控件上的Label值可避免困扰ASP.NET服务器控件的名称重整问题。即使您使用ClientIDMode="Static",我也希望尽可能避免在jQuery中使用服务器控件的ID,因为ASP.NET不会破坏类名。

答案 1 :(得分:0)

您可以使用ASP页面方法来执行此操作:

http://www.geekzilla.co.uk/View7B75C93E-C8C9-4576-972B-2C3138DFC671.htm