• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

        asp.net高級(jí)圖文詳細(xì)教程(3)-實(shí)戰(zhàn)篇

        asp.net高級(jí)圖文詳細(xì)教程(3)-實(shí)戰(zhàn)篇

        更新時(shí)間:2022-05-06 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        結(jié)合論壇用戶操作談asp.net表單驗(yàn)證(上)

            有了前面的知識(shí),現(xiàn)在我們要進(jìn)入實(shí)戰(zhàn)。做過asp的朋友都知道表單驗(yàn)證是個(gè)比較頭疼的問題,有經(jīng)驗(yàn)的Web程序員有這么一句話,那就是客戶端不相信服務(wù)器端,服務(wù)器端不相信客戶端。什么意思呢,就是說做表單驗(yàn)證時(shí)服務(wù)器端程序不能假定客戶端程序是正確的而不加檢測(cè),這樣如果客戶端關(guān)閉javascript就可能造成出錯(cuò),而如果只做服務(wù)器端檢測(cè),那么需要提交到服務(wù)器端再返回,那么效率會(huì)大打折扣,并且對(duì)于用戶極不方便。所以只能客戶端和服務(wù)器端做兩次驗(yàn)證。現(xiàn)在asp.net提供了新的表單驗(yàn)證機(jī)制,下面我將結(jié)合實(shí)例簡(jiǎn)單講一下,想要了解asp.net提供的幾個(gè)驗(yàn)證webcontrol的詳細(xì)資料,可以參照我的asp+初級(jí)教程。
            在講表單驗(yàn)證以前,先做點(diǎn)準(zhǔn)備工作。前面談到用asp.net開發(fā)需要轉(zhuǎn)換編程思維,也就是用面向?qū)ο蟮乃枷肴タ紤]問題,bbs對(duì)象我們已經(jīng)構(gòu)造好了,現(xiàn)在讓我們來看一下一個(gè)論壇系統(tǒng)中另外一個(gè)很重要的對(duì)象:用戶。可以說,論壇系統(tǒng)的主體是用戶,沒有用戶那也就談不上什么論壇了,所以圍繞用戶的操作很多,比如說添加/刪除用戶,查詢/修改用戶資料等等,有些論壇還有積分機(jī)制,根據(jù)用戶登錄次數(shù)或發(fā)言多少來決定積分,已表明該用戶的活躍程度。那么,我們應(yīng)該如何來構(gòu)造論壇用戶這個(gè)對(duì)象呢?看看

        下面的類定義:
        namespace MyOwnClass
        {
            using System;
            using MyOwnClass ;
            using System.Data.SQL ;
            using System.Web.Util ;

            ////////////////////////////////////////////////////////////////////
            //
            // Class Name :       BBSUser
            //
            // Description:       論壇用戶類,構(gòu)造一個(gè)論壇用戶對(duì)象
            //
            // date:              2000/02/03
            //
            /// ////////////////////////////////////////////////////////////////
            public class BBSUser
            {
                //新建枚舉類型,創(chuàng)建用戶方式,創(chuàng)建還是修改
                public enum CreateType
                {
                    Create = 0 ,
                    Modify
                }

                //私有成員變量
                private int m_intID ;                //用戶ID
                private string m_strUserName ;            //用戶名
                private string m_strPassword ;            //密碼
                private string m_strEmail ;            //用戶email
                private string m_strHomepage ;            //個(gè)人主頁
                private string m_strSignature ;            //簽名

                //屬性,全部只讀
                public int ID
                {
                    get
                    {
                        return m_intID ;
                    }
                }

                public string UserName
                {
                    get
                    {
                        return m_strUserName ;
                    }
                }

                public string Password
                {
                    get
                    {
                        return m_strPassword ;
                    }
                }

                public string Email
                {
                    get
                    {
                        return m_strEmail ;
                    }
                }

                public string Homepage
                {
                    get
                    {
                        return m_strHomepage ;
                    }
                }

                public string Signature
                {
                    get
                    {
                        return m_strSignature ;
                    }
                }
                //構(gòu)造函數(shù)
                public BBSUser()
                {
                    //
                    // TODO: Add Constructor Logic here
                    //
                    m_strUserName = "" ;
                    m_strPassword = "" ;
                    m_strEmail = "" ;
                    m_strHomepage = "" ;
                    m_strSignature = "" ;
                }

                //根據(jù)用戶名查詢用戶資料
                public bool GetUser(string a_strUserName)
                {
                    //如果用戶名中包含單引號(hào)則拋出一個(gè)異常
                    if (a_strUserName.IndexOf("'") != -1)
                    {
                        throw(new Exception("用戶名包含非法字符")) ;
                    }

                    bool bExists = false ;

                    MyConnection myConn = new MyConnection() ;
                    try
                    {
                        myConn.Open() ;
                        SQLCommand myCommand = new SQLCommand() ;
                        myCommand.ActiveConnection = myConn ;
                        myCommand.CommandText = "select * from BBSUser where

        UserName='" + a_strUserName + "'";

                        SQLDataReader myReader ;
                        myCommand.Execute(out myReader) ;
                        
                        if (myReader.Read())
                        {
                            m_intID = (int)myReader["ID"] ;
                            m_strUserName = myReader["UserName"].ToString() ;
                            m_strPassword = myReader["password"].ToString() ;
                            m_strEmail = myReader["Email"].ToString() ;
                            m_strHomepage = myReader["Homepage"].ToString() ;
                            m_strSignature = myReader["Signature"].ToString() ;
                            bExists = true ;
                        }
                        else
                        {
                            bExists = false ;
                        }

                        myReader.Close() ;
                        myConn.Close() ;
                        
                    }
                    catch(SQLException e)        //如果出現(xiàn)異常
                    {

                        throw(new Exception("數(shù)據(jù)庫(kù)異常:" + e.Message)) ;
                        
                    }                    

                    //返回結(jié)果
                    return bExists ;            
                }

                //重載,根據(jù)用戶ID查找用戶
                public bool GetUser(int a_intUserID)
                {

                    bool bExists = false ;

                    MyConnection myConn = new MyConnection() ;
                    try
                    {
                        myConn.Open() ;
                        SQLCommand myCommand = new SQLCommand() ;
                        myCommand.ActiveConnection = myConn ;
                        myCommand.CommandText = "select * from BBSUser where id=" +

        a_intUserID.ToString() ;

                        SQLDataReader myReader ;
                        myCommand.Execute(out myReader) ;
                        
                        if (myReader.Read())
                        {
                            m_intID = (int)myReader["ID"] ;
                            m_strUserName = myReader["UserName"].ToString() ;
                            m_strPassword = myReader["password"].ToString() ;
                            m_strEmail = myReader["Email"].ToString() ;
                            m_strHomepage = myReader["Homepage"].ToString() ;
                            m_strSignature = myReader["Signature"].ToString() ;
                            bExists = true ;
                        }
                        else
                        {
                            bExists = false ;
                        }

                        myReader.Close() ;
                        myConn.Close() ;
                        
                    }
                    catch(SQLException e)        //如果出現(xiàn)異常
                    {

                        throw(new Exception("數(shù)據(jù)庫(kù)異常:" + e.Message)) ;
                        
                    }                    

                    //返回結(jié)果
                    return bExists ;            
                }

                //新建用戶
                public void CreateUser(BBSUser.CreateType a_enumCreateType ,string

        a_strUserName ,
                                        string a_strPassword ,

        string a_strEmail ,
                                        string a_strHomepage ,

        string a_strSignature)
                {
                    //監(jiān)測(cè)參數(shù)有效性
                    if (a_strUserName.IndexOf("'") != -1 || a_strPassword.IndexOf("'")

        != -1
                        || a_strEmail.IndexOf("'") != -1 ||

        a_strHomepage.IndexOf("'") != -1
                        || a_strSignature.IndexOf("'") != -1)
                    {
                        throw(new Exception("包含非法字符")) ;
                    }

                    try
                    {
                        MyOwnClass.MyConnection myConn = new MyConnection() ;
                        SQLCommand myCmd = new SQLCommand() ;

                        //判斷是新建用戶還是修改用戶資料
                        if (a_enumCreateType == BBSUser.CreateType.Create)
                        {
                            myCmd.CommandText = "insert into BBSUser(UserName ,

        Password , Email , Homepage , Signature)"
                                    + "values('" + a_strUserName + "','"

        + a_strPassword + "','"
                                    + a_strEmail + "','" + a_strHomepage

        + "','" + a_strSignature + "')" ;
                        }
                        else
                        {
                            myCmd.CommandText = "update BBSUser set Email='" +

        a_strEmail
                                + "' , Homepage='" + a_strHomepage + "' ,

        Signature='"
                                + a_strSignature + "' where username='" +

        a_strUserName + "'";
                        }
                        myConn.Open() ;
                        myCmd.ActiveConnection = myConn ;
                        myCmd.ExecuteNonQuery() ;
                        myConn.Close() ;

                    }
                    catch(SQLException exp)
                    {
                        throw(new Exception("數(shù)據(jù)庫(kù)出錯(cuò):" + exp.Message)) ;
                    }

                }

                //取回密碼
                public void GetPassword(string a_strUserName , string a_strEmail)
                {

                    if (GetUser(a_strUserName) && m_strEmail == a_strEmail)
                    {
                        //發(fā)送Email
                        System.Web.Util.MailMessage myMail = new MailMessage() ;
                        myMail.From = "lyp@server1.domain" ;
                        myMail.Subject = "取回您的密碼" ;
                        myMail.Body = "請(qǐng)牢記您的密碼:" + m_strPassword ;
                        myMail.To = a_strEmail ;
                        SmtpMail.Send(myMail) ;
                    }
                    else
                    {
                        throw (new Exception("該用戶不存在")) ;
                    }
                }
                
            }
        }

            通過前面的學(xué)習(xí),你可能已經(jīng)能夠看懂這個(gè)類定義的大部分內(nèi)容,那些是成員變量,那些是屬性,那些是方法都可以理解了,在這里需要解釋的只有以下兩部分內(nèi)容,首先看這段代碼:
                
        public enum CreateType
        {
            Create = 0 ,
            Modify
        }
            這段代碼的作用是創(chuàng)建BBSUser類的一個(gè)枚舉變量,寫過c程序的朋友很容易理解,建立這個(gè)枚舉變量的作用是簡(jiǎn)化記憶,用容易記憶的名稱代替值,比如上邊這個(gè)定義,當(dāng)在方法CreateUser里作為第一個(gè)參數(shù)時(shí),BBSUser.CreateType.Create實(shí)際的值是0,代表這個(gè)方法的目的是創(chuàng)建用戶,而如果是BBSUser.CreateType.Modify,則代表目的是修改用戶資料。顯而易見,用if (a_enumCreateType == BBSUser.CreateType.Create)這樣的語句比用if (a_intCreateTYpe == 1)更容易記憶,最大限度減少出錯(cuò)的可能。

            另外一個(gè)要解釋的內(nèi)容是:你可能已經(jīng)注意到在類的定義中有兩個(gè) GetUser方法的定義,其作用域和返回值都相同,只是參數(shù)類型不同。沒錯(cuò),這種做法叫重載(override),是并且只能是面向?qū)ο蟪绦蛘Z言實(shí)現(xiàn)多態(tài)性的基本方法,那么這樣做有什么好處呢?就是根據(jù)參數(shù)不同由類自己決定應(yīng)該調(diào)用那個(gè)正確的方法,這樣講可能有些抽象,那么舉個(gè)例子來說吧,這個(gè)GetUser方法的作用是取得用戶資料,那么它可以通過用戶名來取得資料,也可以通過用戶ID來取得,如果不用函數(shù)的重載,那么我們需要建兩個(gè)函數(shù),可能一個(gè)叫GetUserFromName(string a_strName) , 而另一個(gè)是GetUserFormID(int a_intID),在調(diào)用時(shí)
        需要判斷一下決定調(diào)用那個(gè)方法,象這樣:
        if ( BBSUser.ID != "")
        {
          GetUserFromID(BBSUser.ID) ;
        }
        else if(BBSUser.Name != "")
        {
          GetUserFromName(BBSUser.Name) ;
        }

            以上兩種方法孰優(yōu)孰劣恐怕已經(jīng)不用我說了吧。
            好了,既然我們已經(jīng)創(chuàng)建好BBSUser對(duì)象,下面就可以利用它來進(jìn)行對(duì)用戶的操作了。

        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 亚洲AV永久无码精品水牛影视 | a级日本高清免费看| 国产性生交xxxxx免费| 亚洲国产精品网站在线播放| 国产又黄又爽又猛免费app| 亚洲精品国产成人| 91精品国产免费网站| 久久精品九九亚洲精品| 91成人在线免费观看| 亚洲美女视频一区二区三区| 免费看片在线观看| 亚洲av日韩av综合| 大学生一级特黄的免费大片视频| 亚洲精品9999久久久久无码| 国产免费黄色大片| 一级白嫩美女毛片免费| 亚洲色中文字幕无码AV| 91麻豆国产免费观看| 国产精品亚洲片在线va| 久久青青成人亚洲精品| 99ee6热久久免费精品6| 亚洲国产成人精品久久| 免费网站看v片在线香蕉| 日本免费精品一区二区三区| 亚洲日韩精品无码一区二区三区 | 成人浮力影院免费看| 亚洲成av人在线视| 久久久久久国产精品免费无码| 亚洲a级片在线观看| 国产伦精品一区二区三区免费迷| 久久国产精品免费一区二区三区| 亚洲精品自产拍在线观看动漫| 无码国产精品一区二区免费虚拟VR| 亚洲欧洲成人精品香蕉网| 全黄大全大色全免费大片| 亚洲国产综合91精品麻豆| 成人黄软件网18免费下载成人黄18免费视频 | 免费无码又爽又高潮视频| 一级做a爰全过程免费视频毛片| 国产精品亚洲一区二区三区在线| 午夜福利不卡片在线播放免费 |