Ajax 登陆控件

-------------------------------控件源码
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace AjaxControl
{
    /// <summary>
    ///AjaxLogin 的摘要说明
    /// </summary>
    public class AjaxLogin:CompositeControl
    {
        private AjaxLoginContainer _templateContainer;
        private ITemplate _loginTemplate;
        [PersistenceMode(PersistenceMode.InnerProperty ),TemplateContainer(typeof(AjaxLogin ))]
        public ITemplate LayoutTemplate
        {
            get
            {
                return this._loginTemplate;
            }
            set
            {
                this._loginTemplate =value;
                base.ChildControlsCreated = false;
            }
        }
        public AjaxLogin()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }

        protected override HtmlTextWriterTag TagKey
        {
            get
            {
                return HtmlTextWriterTag.Div;
            }
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (!Page.ClientScript.IsClientScriptBlockRegistered(Page.GetType(), "js4ajaxLoginControl"))
            {
                Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "js4ajaxLoginControl", "<script language=/"javascript/" type=/"text/javascript/" src=/"ajaxLogin.js/" ></script>", false);
            }
        }

        protected override void CreateChildControls()
        {
            this.Controls.Clear();
            this._templateContainer = new AjaxLoginContainer(this);
            ITemplate layoutTemplate = this.LayoutTemplate;
            if (layoutTemplate == null)
            {
                this._templateContainer.EnableViewState = false;
                this._templateContainer.EnableTheming = false;
                layoutTemplate = new AjaxLoginTemplate(this);
            }
            layoutTemplate.InstantiateIn(this._templateContainer);
            this.Controls.Add(this._templateContainer);
         


        }
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(writer);
            Control uLv= this.FindControl("LoginView");
            Control uLs = this.FindControl("LoginStatus");
            Control uName =this.FindControl("UserName");
            Control uPwd = this.FindControl("Password");
            Control uLi = this.FindControl("LoginIn");
            Control uLo = this.FindControl("LoginOut");
            Control uCs = this.FindControl("CurrentUser");
            Control uRm = this.FindControl("RememberMe");
          
            if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), this.UniqueID))
            {
                AjaxLoginContainer ajc = this._templateContainer;
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.AppendLine("<script language=/"javascript/" type=/"text/javascript/">");
                sb.AppendFormat("var jx_{0}=new ajaxLogin(/"{0}/",/"{1}/",/"{2}/",/"{3}/",/"{4}/",/"{5}/",/"{6}/",/"{7}/",/"{8}/");",
                                     this.ClientID, uLv.ClientID, uName.ClientID, uPwd.ClientID, uLi.ClientID,
                                     uLs.ClientID, uCs.ClientID, uLo.ClientID, uRm.ClientID);
                sb.AppendFormat("jx_{0}.isOnline(jx_{0}.onCheckUserCompleted,jx_{0}.onHttpStatusError);", this.ClientID);
                sb.AppendFormat("</script>");
                Page.ClientScript.RegisterStartupScript(this.GetType(), this.UniqueID, sb.ToString(), false);


            }
        }



        private sealed class AjaxLoginTemplate : ITemplate
        {
            private AjaxLogin _owner;

            public AjaxLoginTemplate(AjaxLogin owner)
            {
                this._owner = owner;
            }

            #region ITemplate 成员

            public void InstantiateIn(Control container)
            {
                AjaxLoginContainer lc = (AjaxLoginContainer)container;
                CreateControls(lc);

            }

            #endregion


            private void CreateControls(AjaxLoginContainer loginContainer)
            {
                TextBox tb = new TextBox();
                tb.ID = "UserName";
                tb.TextMode = TextBoxMode.SingleLine;
                loginContainer.UserName = tb;

                TextBox pwd = new TextBox();
                pwd.ID = "Password";
                pwd.TextMode = TextBoxMode.Password;
                loginContainer.Password = pwd;

                Button lgIn = new Button();
                lgIn.ID = "LoginIn";
                lgIn.Text = "登录";
                lgIn.UseSubmitBehavior = false;
                loginContainer.LoginInButton = lgIn;

                CheckBox cb = new CheckBox();
                cb.ID = "RememberMe";
                cb.Text = "RememberMe";
                loginContainer.RememberMe = cb;

              
                Label lgN = new Label();
                lgN.ID = "CurrentUser";
                lgN.Text = "";
                loginContainer.CurrentUser = lgN;

                Button lgOut = new Button();
                lgOut.ID = "LoginOut";
                lgOut.Text = "注销";
                lgOut.UseSubmitBehavior = false;
                loginContainer.LoginOutButton = lgOut;

                Panel lgView = new Panel();
                lgView.ID = "LoginView";
                loginContainer.LoginView = lgView;

                Panel lgStatus = new Panel();
                lgStatus.ID = "LoginStatus";
                loginContainer.LoginStatus = lgStatus;



            }

        }
        internal sealed class AjaxLoginContainer : WebControl
        {
            public TextBox UserName;
            public TextBox Password;
            public CheckBox RememberMe;
            public Button LoginInButton;

            public Label CurrentUser;
            public Button LoginOutButton;

            public Panel LoginView;
            public Panel LoginStatus;

            private AjaxLogin _owner;
            public AjaxLoginContainer(AjaxLogin owner)
            {
                _owner = owner;
            }
            public override void RenderBeginTag(HtmlTextWriter writer)
            {

            }
            public override void RenderEndTag(HtmlTextWriter writer)
            {

            }
        }
    }
  
}

------------------------ajaxLogin.js---------------------
  function $(id){ return document.getElementById(id);};
           function $F(id) { return $(id).value;};
           function $Event(id,eventName,funName){
                  var o=$(id);
                  if(!o["evtAdd"])
                  {
                     //o.detachEvent ? o.detachEvent("on"+eventName,funName ): o.removeEventListener(eventName ,funName ,false );
                     o.attachEvent ? o.attachEvent("on"+eventName,funName):o.addEventListener(eventName,funName,false   );
                     o["evtAdd"]=true ;
                  }
           }
           function $Text(id,msg){
                  var o=$(id);
                  o.innerHTML=msg;
           }
           function messageData(httpResponseText){
                this.responseText=httpResponseText;
                var code=0;
                var desc="";
                this.msgCode=function(){
                     var  tmp="";
                     try
                     {
                        tmp=this.responseText.substring(0,2);
                     }
                     catch(e)
                     {
                       
                     }
               
                     switch(tmp )
                     {
                                  case "0:":
                                     code =0;
                                     break;
                                  case "1:":
                                     code =1;
                                     break ;
                                  case "2:":
                                     code =1;
                                     break ;
                                  case "3:":
                                     code =1;
                                     break ;
                                  case "4:":
                                     code =1;
                                     break ;
                                 case "5:":
                                     code =5;
                                     break;
                                 default:
                                     code =-1;
                                     break ;
                     }
                     return code ;
                }
                this.msgDesc=function(){
                     try
                     {
                        desc =this.responseText.substring(2);
                     }
                     catch(e)
                     {
                     }
                     return desc ;
                    
                }
           }
           function ajaxLogin(lgoinViewId,loginCtrlId,lgUserName,lgUserPwd,lgCmd,loginStatusId,loginStatusName,loginOutId,loginRemberMe){
                 this.loginViewId=lgoinViewId ;
                
                 this.loginControlId=loginCtrlId ;
                 this.loginUserName=lgUserName ;
                 this.loginPassword=lgUserPwd ;
                 this.loginButton=lgCmd ;
              
                 this.loginStatusId=loginStatusId ;
                
                 this.loginStatusName=loginStatusName ;
                 this.loginOutButton=loginOutId ;
          
                 this.loginRemberMeId=loginRemberMe;
                 var cTh=this ;

                 this.init=function(){
                        var http=false ;
                        if(typeof ActiveXObject !="undefined"){
                            try
                            {
                                http=new ActiveXObject("Msxml2.XMLHTTP");
                            }
                            catch(e)
                            {
                                try
                                {
                                    http=new ActiveXObject("Microsoft.XMLHTTP");
                                }
                                catch(E)
                                {
                                    http=false ;
                                }
                            }
                        } else if(XMLHttpRequest ){
                               try
                               {
                                   http=new XMLHttpRequest();
                               }
                               catch(e)
                               {
                                  http=false ;
                               }
                        }
                        if(http)
                        {
                           
                            $Event(cTh.loginButton,"click",cTh.loginClick );
                            $Event(cTh.loginOutButton ,"click",cTh.loginOutClick );
                        }
                        return http ;
                 }
                 this.showIn=function(){
                        $(cTh.loginControlId).style.display="none";
                        $(cTh.loginStatusId).style.display="";
                 }
                 this.showOut=function(){
                
                        $(cTh.loginStatusId).style.display="none";
                        $(cTh.loginControlId).style.display="";
                 }
                 this.clear=function(){
                     $(cTh.loginUserName ).value="";
                     $(cTh.loginPassword ).value="";
                     try
                     {
                        $(cTh.loginRemberMeId ).checked=false ;
                     }
                     catch(e)
                     {
                     }
                 }
                
                 this.loginOut=function(onCompleted,onRunning,onError){
                         var http=cTh.init();
                         if(!http)
                          return ;
                         http.open("GET","LoginOut.aspx",true);
                         http.onreadystatechange=function(){
                                if(http.readyState==4){
                                     if(http.status==200){
                                        onCompleted();
                                     } else {
                                        onError();
                                     }
                                } else {
                                     onRunning();
                                }
                         }
                         http.send(null);
                 }
                
                 this.loginOutComplected=function(){
                         cTh.showOut ();
                 }
                 this.loginOutRunning=function(){
                 }
                 this.loginOutErr=function (){
                 }
                
                 this.loginClick=function(evt){
               
                        var name=$F(cTh.loginUserName );
                        var pwd=$F(cTh.loginPassword );
                     
                        var rm="0"
                        try
                        {
                          rm=$(cTh.loginRemberMeId ).checked   ?  "1":"0";
                        }
                        catch(e)
                        {
                        }
                        cTh.login(name ,pwd,rm,cTh.onLoginCompleted ,cTh.onHttpStatusError ,cTh.onLoginRunning);
                        alert("You click");
                        if(window.event){
                             window.event.returnValue=false ;
                        } else {
                            evt.preventDefault();
                        }
                 }
                 this.loginOutClick=function(evt){
                        cTh.loginOut(cTh.loginOutComplected ,cTh.loginOutRunning ,cTh.loginOutErr);
                        if(window.event){
                             window.event.returnValue=false ;
                        }   else {
                            evt.preventDefault();
                        }
                 }
               
                 this.login=function(userName,passwrod,remberMe,onCompletedCallback,onErrorCallback,onRunningCallback){
                       var http= cTh.init();
                       if(!http)
                        return
                       http.open("POST","Login.aspx",true );
                       http.onreadystatechange=function(){
                            var state=http.readyState;
                            if(http.readyState==4){
                               if(http.status==200){
                                    onCompletedCallback(http.responseText);
                               } else {
                                    onErrorCallback(http.status);       
                               }
                            } else {
                               if(onRunningCallback ){
                                   onRunningCallback(state);
                               }
                            }
                       }
                       var params="UserName="+escape(userName)+"&Password="+escape(passwrod )+"&RemberMe="+remberMe;
                        http.send(params);
                 }
                 this.onLoginRunning=function (state){
                 }
                 this.onLoginCompleted=function(data){
                       var msg=new messageData(data);
                      var code=msg.msgCode ();
                      debugger
                      var desc=msg.msgDesc ();
                       switch(code )
                      {
                             case 0:
                                cTh.showIn();
                                $Text(cTh.loginStatusName ,desc );
                                cTh.clear ();
                                break ;
                             case 1:
                             case 2:
                             case 3:
                             case 4:
                             case 5:
                                alert(desc);
                                break;
                             default :
                                alert("浏览器脚本错误");
                                break ;
                               
                      }
                 }
               
                 this.isOnline=function(onCompletedCallback,onErrorCallback){
          
                      var http=cTh.init ();
                      if(!http )
                         return false ;
                      http.open("GET","Chk.aspx",true );
                      http.onreadystatechange=function(){
                          var state=http.readyState;
                          if(http.readyState==4){
                             if(http.status==200){
                                onCompletedCallback(http.responseText);
                             } else {
                                 onErrorCallback(http.status);
                             }
                          }
                      }
                      http.send(null);
                 }
                 this.onCheckUserCompleted=function(data){
                        var msg=new messageData(data );
                        var code=msg.msgCode ();
                        switch(code )
                        {
                             case 0:
//                                alert("用户已经登陆:"+msg.msgDesc() );
                                cTh.showIn();
                                $Text(cTh.loginStatusName ,msg.msgDesc ());
                                break;
                             case 1:
//                                alert("用户没有登陆")
                                cTh.showOut();
                                break;
                             default:
                                break;
                        }
                 }
                 this.onHttpStatusError=function(status){
                       alert("服务器错误:"+status );
                 }
           }
---------------------------------------HttpHandler.cs-----------------------
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
///LoginHttpHandler 的摘要说明
/// </summary>
public class LoginHttpHandler:IHttpHandler
{
    public LoginHttpHandler()
    {
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }

    #region IHttpHandler 成员

    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Clear();
        context.Response.Expires = -1;
        context.Response.Write("0:Success");
    }

    #endregion
}

public class CheckHttpHandler : IHttpHandler
{
    #region IHttpHandler 成员

    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Clear();
        context.Response.Expires = -100;
        context.Response.Write("1:OK");
    }

    #endregion
}
public class LoginOutHttpHandler : IHttpHandler
{
    #region IHttpHandler 成员

    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Clear();
        context.Response.Expires = -100;
        context.Response.Write("0:Success");
    }

    #endregion
}
---------------------------------web.config------------------------
   <add name="Login" verb="*" path="Login.aspx" type="LoginHttpHandler"/>
            <add name="LoginChek" verb="*" path="Chk.aspx" type="CheckHttpHandler"/>
            <add name="LoginOut" verb="*" path="LoginOut.aspx" type="LoginOutHttpHandler"/>
----------------------------------default.aspx----------------------
<jx:AjaxLogin ID="lgView" runat="server">
        <LayoutTemplate>
          <asp:Panel ID="LoginView" runat="server">
            用户名:<asp:TextBox ID="UserName" runat="server"></asp:TextBox>密码:<asp:TextBox ID="Password" TextMode="Password" runat="server" ></asp:TextBox><asp:CheckBox ID="RememberMe" runat="server"/>
             <asp:Button ID="LoginIn"  Text="LoginIn" runat="server"/>
         </asp:Panel>
         <asp:Panel ID="LoginStatus" runat="server">
            <asp:Label ID="CurrentUser" runat="server" ></asp:Label><asp:Button ID="LoginOut" Text="LoginOut" runat="server" />
        </asp:Panel>
        </LayoutTemplate>
       </jx:AjaxLogin>
------------------------------执行效果:IE7 -----------------------




--------------------------------------Firefox 2.0--------------------------




-------------------------------------目前就写到这里了。

posted on 2008-05-15 22:16  老代哥哥  阅读(154)  评论(0编辑  收藏  举报

导航