2017-3-14
在早上的时候想把邮件上一封与下一封功能完成了。
因为上下功能的按钮是用input type=image做的,所以本想用HTML 服务器控件完成,结果掉入坑里了,当 input=button 的时候是能够触发onserverclick 服务端的事件处理,所以想用同样的方法,结果搞了好久不行,最后发现原来是 type为 image的时候不能触发服务端事件。
protected void changeEmail(object sender, EventArgs e)
{
HtmlInputImage Btn = sender as HtmlInputImage;
string sqlString = "";
//取得与当前 id 相临的上一封或下一封的邮件id
if (Btn.ID.Contains("last"))
sqlString = "select top 1 ID from IN_MAIL where ID>" + ID;
else
sqlString = "select top 1 ID from IN_MAIL where ID<" + ID+“ order by id desc”;
Hashtable hs = Me.Maildb.SelectHashtable(sqlString);
var newID = Convert.ToInt32(hs["ID"] + "");
txid.Value = newID.ToString();
QueryData(newID);
}
所以上面的代码是不能用了,没办法就只能用js来提交了。
所以添加了个一般处理程序,获取方式大致与上面一致。
接着用js 发送请求,接收数据并处理,此处使用 jq 的POST 方法及按钮代码
为什么要给点击后的按钮设置失效?
因为在点击下一封后,请示数据,这个过程是异步的,所以用户仍然可以点击页面上任何有效的部分,如果当前请求还在进行中,那就会发生数据库错误,所以此处禁用按钮。
至于js 中的first 与last 是当前的所显示邮件的最大与最小 ID, 用于判断是否请求的邮件超出范围。