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();
}