atlas客户端页面周期事件及实践:客户端验证
原文:刘武|atlas客户端页面周期事件及实践:客户端验证
大家都知道asp.net页面有很多服务端的周期事件,随着atlas的推出,微软又进一步引入了客户端的周期事件。主要包含以下几个
- initializeRequest 发生在页面初始化之前
- beginRequest 发生在提交数据之前
- pageLoading 发生在提交进行时
- pageLoaded 发生在提交完成,页面刷新之后
- endRequest 发生在整个操作完成之后
本篇根据笔者的项目经验,总结了这些事件主要用途:
一 客户端验证
客户端验证是BS系统中必不可少的操作,他发生在向服务器提交数据之前。因此我们可以在initializeRequest事件中来完成该操作。下 面的例子模拟了一个登录的过程,在点击登录按钮的时候先检查是否有其他操作正在进行,然后再检查用户名和密码是否为空,检查通过后再提交服务端,否则就取 消请求。
<form id="form1" runat="server">
<asp:ScriptManager ID="sm1" runat="server">
</asp:ScriptManager>
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(CheckInput);
function CheckInput(sender,args)
{
var pass=true;
var prm = Sys.WebForms.PageRequestManager.getInstance();
if(prm.get_isInAsyncPostBack())
{
alert("请勿重复登陆");
pass=false;
}
else
{
var no = $get('txtAccount');
var pwd = $get('txtPwd');
if(no.value=='')
{
alert('用户名不能为空');
no.focus();
pass=false;
}
else if(pwd.value=='')
{
alert('密码不能为空');
pwd.focus();
pass=false;
}
}
if(!pass)
{
args.set_cancel(true);
}
}
</script>
<asp:UpdatePanel ID="up1" runat="server" UpdateMode="conditional">
<ContentTemplate>
<asp:TextBox ID="txtAccount" runat="server"></asp:TextBox><br />
<asp:TextBox ID="txtPwd" runat="server" TextMode="password"></asp:TextBox><br />
<asp:Button ID="btnLog" runat="server" Text="LogIn" OnClick="btnLog_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
protected void btnLog_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000);
if (!(txtAccount.Text == "liuwu" &&
txtPwd.Text == "liuwu.net"))
{
throw new ApplicationException("用户名或密码错误");
}
}
例子中使用 Sys.WebForms.PageRequestManager.getInstance()来获取当前页面的PageRequestManager实 例,并使用该实例的add_initializeRequest方法来添加initializeRequest事件,最后使用 InitializeRequestEventArgs.set_cancel(true)方法来取消当前的请求。注意如果用户名或密码不正确的话,服务 端会抛出异常,默认情况下,atlas会在客户端弹出对话框来显示异常信息,后面的文章会介绍如何自定义错误提示。
参考:
浙公网安备 33010602011771号