atlas客户端页面周期事件及实践:客户端验证

原文:刘武|atlas客户端页面周期事件及实践:客户端验证  

大家都知道asp.net页面有很多服务端的周期事件,随着atlas的推出,微软又进一步引入了客户端的周期事件。主要包含以下几个

  1. initializeRequest  发生在页面初始化之前
  2. beginRequest 发生在提交数据之前
  3. pageLoading  发生在提交进行时
  4. pageLoaded 发生在提交完成,页面刷新之后
  5. 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会在客户端弹出对话框来显示异常信息,后面的文章会介绍如何自定义错误提示。

参考:

  1. initializeRequest
  2. InitializeRequestEventArgs
  3. atlas客户端页面周期事件及实践:防止重复提交

posted on 2009-10-09 11:53  刘武  阅读(213)  评论(0)    收藏  举报

导航