• WebForm实现实时信息提醒功能(Timers与Ajax实现及优劣浅析)【转】


    本文主要讲述通过C#定时器Timers类及通过引用第三方类Aajx来实现‘OA’等系统中比较常用的信息提醒功能,并小做分析!

    一,运用Timers定时器触发事件

    此方法主要是指在触发事件里查询数据库,当需要的时候,调用Js,实现信息提醒的功能。
    方法一:前台页面插入一个Timers控件
    1. <asp:ScriptManager runat="server"></asp:ScriptManager>  
    2.     <asp:UpdatePanel runat="server">  
    3.         <ContentTemplate>  
    4.             <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Enabled="true" Interval="500000">  
    5.             </asp:Timer>  
    6.         </ContentTemplate>  
    7.     </asp:UpdatePanel>  
    后台代码如下
    1. protected void Timer1_Tick(object sender, EventArgs e)  
    2.     {  
    3.         try  
    4.         {  
    5.             int i = MesBll.GetMesCount();//获取数据库需要提示数据的个数  
    6.             if (i != 0)  
    7.             {  
    8.                 //相关需要引用的函数  
    9.             }  
    10.         }  
    11.         catch (Exception)  
    12.         {  
    13.             throw;  
    14.         }  
    15.     }  
    方法二:直接后台调用Timers类
    1. private void InitializeComponent()  
    2.   {  
    3.       System.Timers.Timer aTimer = new System.Timers.Timer();  
    4.       aTimer.Elapsed += new ElapsedEventHandler(GetMessageCount);//到达时间的时候执行事件GetMessageCount;  
    5.       aTimer.Interval = 500000;//设置引发时间的时间间隔 此处设置为100秒(1000*100毫秒)  
    6.       aTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);  
    7.       aTimer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;  
    8.   }  
    9.   private void GetMessageCount(object sender, EventArgs e)  
    10.   {  
    11.       try  
    12.       {  
    13.           int i = MesBll.GetMesCount();//获取数据库需要提示数据的个数  
    14.           if (i != 0)  
    15.           {  
    16.               //相关需要引用的函数  
    17.           }  
    18.       }  
    19.       catch (Exception)  
    20.       {  
    21.           throw;  
    22.       }  
    23.   }  

    二,引用Ajax实现信息提醒功能

    首先是前期配置。
    在bin文件夹下引用下载好的AjaxPro.2.dll文件,然后是在web.config文件下加入下面这段配置代码。
    1. <system.web>  
    2.     <!--调用ajax,留言信息提醒用-->  
    3.     <httpHandlers>  
    4.       <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>  
    5.     </httpHandlers>  
    6.   </system.web>  
    OK,完美完成,其实运用很简单,首先是在后台调用Ajax并写好相应的响应事件:
    1. Bll.CusLeaMassegeBll MesBll = new Bll.CusLeaMassegeBll();  
    2.  protected void Page_Load(object sender, EventArgs e)  
    3.  {   
    4.      #region 注册无刷新  
    5.     AjaxPro.Utility.RegisterTypeForAjax(typeof(Text));//Text为我当前页面的类名  
    6.     #endregion   
    7.      if (!IsPostBack)  
    8.      {  
    9.      }  
    10.  }  
    11.  /// <summary>  
    12.  /// 查看用户当前的数据表  
    13.  /// </summary>  
    14.  /// <returns></returns>  
    15.  [AjaxPro.AjaxMethod]  
    16.  public string getxx()  
    17.  {  
    18.      int news = MesBll.GetMesCount();//从数据表里得到需要提醒的数值  
    19.      return news.ToString();  
    20.  }  
    然后,现在只要在前台调用这段js就可以了。
    1.  <script language="javascript" type="text/javascript">  
    2.         setInterval("getque()", 50000); //从数据库中读取数据是间隔时间,每1000值为1分钟  
    3.         function getque() {  
    4.             var getobject = Text.getxx(callback);} //取当前用户的新信息,返回新信息的数量,Text为后台类名  
    5.         function callback(res) //回调函数  
    6.         {  
    7.             var idocument.getElementById("disMes");  
    8.             if (res.value > 0){//如果新信息的数量大于0则给用户弹窗口提示,这里只是测试,您可以用其它方法来实现提示  
    9.                 i.style.display = "block";  
    10.                 alert('您收到' +res.value + '条新信息,点击确定查看');  
    11.                 // varurl="Default.aspx";  
    12.                 // window.open(url,'600','400',1); //点击确定后进入当前用户的收件箱页面。  
    13.             }  
    14.         }  
    15. </script>   
  • 相关阅读:
    openjudge666:放苹果—题解
    欢迎来到路由器的世界!这里是开端
    Codevs1169:传纸条——题解
    POJ3498:March of the Penguins——题解
    模板:并查集
    模板:快速幂
    模板:排序(三)
    程序员之间的鄙视链
    自动化测试的成本高效果差,那么自动化测试的意义在哪呢
    自动化测试的成本高效果差,那么自动化测试的意义在哪呢
  • 原文地址:https://www.cnblogs.com/yigerendehaibian/p/3513316.html
Copyright © 2020-2023  润新知