用户自定义的Alert弹出框和ajax验证登录

来源:互联网 发布:网络协议分层研究qq 编辑:程序博客网 时间:2024/04/27 18:43
 

  一看题目就知道要说的东西太多了,其实用其它的技术也能实现,但为了用户体验好,所以才寻求不断的改进,做这个登录项目时遇到了很多的难点,不然也没有必要在这里写总结了。

用到的技术有:ajax验证,handler作为处理,自定义的Confirm框,当点击确定后又怎么样和后台交互,用到了Postback,Postback时又遇到了不少的问题,好在网络论坛上的支言片语,让这些难点被各个击破。

         首先说说文本框的回车事件,因为用ajax验证,这里的提交按钮用的是input button,为什么不用asp.net服务端用户控件呢?点击哪都会提交,但是你有没有想过当用户名或密码输入不正确时,清空文本框然后我把焦点放到文本框去就难了。当初我在网上找了一段测试代码,在各大主流的浏览器上都可以执行,但怎么样把他代码中的alert(“asdf”),替换成自己想要的点击按钮事件,你可以试试,这个问题困扰了我两天,然而在第二天的早上,不知哪来的灵感何不把焦点放到按钮上去(document.getElementById("btnLogin1").focus();,一试,呵,成了。

   function SubmitKeyClick(obj, evt) {

        evt = (evt) ? evt : ((window.event) ? window.event : "")

        keyCode = evt.keyCode ? evt.keyCode : (evt.which ? evt.which : evt.charCode);

        if (keyCode == 13) {

          alert("asdf");

document.getElementById("btnLogin1").focus();

        }

}

文本框的keydown事件写上onkeydown="return SubmitKeyClick(this,event)"

自定义alert效果图:

登录

 

第二个问题就是提交后的处理程序,我用的是handler,这里遇到的问题还不是特别的大,但这个问题很难发现,编译不会出错,运行不会出错,但就是没有自己想要的结果,调试时会报异常。后来通过高人的指点才知道这个类里要用session必须还有实现另外一个接口System.Web.SessionState.IRequiresSessionState

 public class AjaxLogin : IHttpHandler, System.Web.SessionState.IRequiresSessionState

 

 

 

第三个问题就是如何当我点击了confirm对话框中的确定按钮后怎么样跟后台交互,比如说在删除一条数据记录等,因为在ConfirmInfo函数中预留了两个函数的位置,一个是点击“确定”按钮时调用的,另一个是当点击“取消”或对话框中的X按钮时调用的,也就是说不管怎么样都是用JS去做,这个时候你会想到怎么去跟后台交互,当初我二话没说想到了用__postback()方法去作,但用postback又遇到了问题,如果我页面中没有linkbutton,页面是不会自动生成postback方法的(可以查看源代码),如果整个页面中都没有用到linkbutton去做弹出对话框,那又该怎么去做?如果让LinkButton隐藏不可见,达不到目的,有一个方法可以在后台创建一个在源代码中有dopostback方法,如下:

        /// <summary>

        /// 创建jsPostback事件

        /// </summary>

        /// <returns></returns>

        protected string PostBack()

        {

            return ClientScript.GetPostBackEventReference(this.btnDel, "");

        }

这里的this.btnDel是要触发事件的控件,有了这个方法还是在源代码中显示不了dopostback方法,我们还得在html页面中加上对这个方法的引用,如下:

<%string aa = PostBack(); %>   为了不在页面中显示任何不要的内容(由PostBack()方法生成)我们不得不这样做,

以上只是个人的一些总结,不免有局限性,还望各位程序员一并把它完善。然后写出想法来和大家一起分享。

原创粉丝点击