星星^-^想飞

导航

ASP.net 基于Ajax 站内短信即时查询的思路

站内短信收发方面没有什么可说的,关键是在用Ajax做即时查询的时候碰到了些问题,昨晚终于解决了!同时测试通过!

在数据库设计上面,基本上要设计三个表,

1.短信发送

2.短信收取

3.状态表

整个数据设计的查询是基于LINQ~!

1.短信实时读取更新:

表述层上面,发送的方面基本没有难点~!收取方面要做到客户点击后就代表读取过短信,必须要在短信收取表上加载字段“是否读取”值,为bool,默认为0。如果客户点击邮件时转到邮件读取页面,同时做更新字段“是否读取”为1,标记为已读取就可以了~!

2.短信即时提醒:

短信即时提醒用到了Ajax技术的Timer控件,如果想在整个网站都做到能即时提醒更新,在MasterPage.master页面放入一个

UpdatePanel控件,里面放入Timer控件就可以了,然后设计Timer控件时间在后台做数据库轮回查询~!同时进入MasterPage.master.cs进行代码编写:

主要分三个步骤:

1.首先查询出短信收取里面的字段“是否读取”值为0的Count。

2.查询出短信状态表里面的状态的值

3.对比查询出的两个值,如果1值>2值。更新状态表的状态值,同时弹出对话框,提醒用户查收短信~!

附:

protected void Timer1_Tick(object sender, EventArgs e)
    {
        UpdateLabel();

        dxsqDataContext dxdc = new dxsqDataContext();
        var jieguo = from info in dxdc.dxs
                     where info.收信人 == Convert.ToString(Session["userName"]) && info.标记 == 0
                     group info by info.标记 into g
                     select new
                     {
                         未读总 = g.Count()
                     };


        foreach (var item in jieguo)
        {
            dxzLa.Text = Convert.ToString(item.未读总);
        }
        dxstateDataContext dxst = new dxstateDataContext();
        var jieguo1 = from inf in dxst.dxzt
                      where inf.userName == Convert.ToString(Session["userName"])
                      select new
                      {
                          状态总 = inf.state
                      };

        foreach (var item1 in jieguo1)
        {
            ztzLa.Text = Convert.ToString(item1.状态总);

        }
        int dxzint = Convert.ToInt32(dxzLa.Text);
        int ztzint = Convert.ToInt32(ztzLa.Text);

        if (dxzint > ztzint)
        {
            dxstateDataContext dxzt = new dxstateDataContext();
            var jieguo2 = dxzt.dxzt.Single(L => L.userName == Convert.ToString(Session["userName"]));
            jieguo2.state = ztzint;
            dxst.SubmitChanges();
            ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "", "var msg = new PopBubble('短消息提示:','您有" + dxzint + "封未读消息',''); msg.show();", true);

        }


    }
    private void UpdateLabel()
    {
        timela.Text = System.DateTime.Now.ToString();
    }

 

posted on 2010-08-01 06:57  星星^-^想飞  阅读(992)  评论(0编辑  收藏  举报