亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

asp.net高級教程(三)-實戰篇

2019-11-18 21:15:54
字體:
來源:轉載
供稿:網友
結合論壇用戶操作談asp.net表單驗證(上)

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

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

    ////////////////////////////////////////////////////////////////////
    //
    // Class Name :       BBSUser
    //
    // Description:       論壇用戶類,構造一個論壇用戶對象
    //
    // date:              2000/02/03
    //
    /// ////////////////////////////////////////////////////////////////
    public class BBSUser
    {
        //新建枚舉類型,創建用戶方式,創建還是修改
        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 ;            //個人主頁
        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 ;
            }
        }
        //構造函數
        public BBSUser()
        {
            //
            // TODO: Add Constructor Logic here
            //
            m_strUserName = "" ;
            m_strPassword = "" ;
            m_strEmail = "" ;
            m_strHomepage = "" ;
            m_strSignature = "" ;
        }

        //根據用戶名查詢用戶資料
        public bool GetUser(string a_strUserName)
        {
            //如果用戶名中包含單引號則拋出一個異常
            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)        //如果出現異常
            {

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

            //返回結果
            return bExists ;            
        }

        //重載,根據用戶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)        //如果出現異常
            {

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

            //返回結果
            return bExists ;            
        }

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

a_strUserName ,
                                string a_strPassword ,

string a_strEmail ,
                                string a_strHomepage ,

string a_strSignature)
        {
            //監測參數有效性
            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("數據庫出錯:" + exp.Message)) ;
            }

        }

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

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

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

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

    以上兩種方法孰優孰劣恐怕已經不用我說了吧。
    好了,既然我們已經創建好BBSUser對象,下面就可以利用它來進行對用戶的操作了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清videos高潮hd| 国产精品a久久久久久| 国产一区二区日韩| 欧美中文在线字幕| 国产美女直播视频一区| 亚洲综合色激情五月| 韩国三级电影久久久久久| 亚洲偷熟乱区亚洲香蕉av| 亚洲精品国产成人| 亚洲欧美精品伊人久久| www.日本久久久久com.| 91精品国产高清| 色婷婷综合久久久久中文字幕1| 日韩av一区在线观看| 欧美日韩国产一区中文午夜| 欧美激情在线狂野欧美精品| 久久久亚洲影院你懂的| 91av在线影院| 色黄久久久久久| 正在播放欧美视频| 欧美激情xxxx性bbbb| 亚洲精品98久久久久久中文字幕| 久久久精品亚洲| 国产精品福利小视频| 欧美视频裸体精品| 久久久999精品| 中文字幕亚洲在线| 欧美另类高清videos| 777午夜精品福利在线观看| 中文字幕亚洲专区| 中文字幕欧美在线| 色七七影院综合| 色噜噜狠狠狠综合曰曰曰| 欧洲成人免费aa| 国产一区二区精品丝袜| 欧美精品video| 性欧美长视频免费观看不卡| 色噜噜久久综合伊人一本| 精品中文字幕久久久久久| 日韩视频免费大全中文字幕| 在线播放日韩精品| 久久久中文字幕| 欧美日韩国产精品专区| 精品久久久久久中文字幕大豆网| 欧美激情乱人伦| 视频一区视频二区国产精品| 日韩在线观看网址| 成人午夜一级二级三级| 欧美激情乱人伦| 亚洲女人被黑人巨大进入al| 91在线观看免费高清完整版在线观看| 97av在线视频| 亚洲精品日韩在线| 在线亚洲欧美视频| 久久中文字幕在线视频| 91在线直播亚洲| 日韩精品亚洲视频| 欧美中文字幕第一页| 欧美日韩国产专区| 国产精品女主播视频| 精品国产精品三级精品av网址| 国内伊人久久久久久网站视频| 精品电影在线观看| 在线成人激情黄色| 欧美激情免费观看| 久久久久99精品久久久久| 亚洲系列中文字幕| 日韩av在线网址| 亚洲国产成人久久综合一区| 狠狠综合久久av一区二区小说| 亚洲二区中文字幕| 亚洲男女性事视频| 国产精品成人免费视频| 色偷偷偷综合中文字幕;dd| 国产精品久久久久久久久久久不卡| 国产精品91在线观看| 国产在线观看精品| 欧美寡妇偷汉性猛交| 亚洲人成五月天| 欧美日韩亚洲精品一区二区三区| 久久精品亚洲国产| 欧美黄色三级网站| 狠狠躁18三区二区一区| 欧美黑人巨大xxx极品| 日韩黄色av网站| 91av在线播放视频| 九九精品在线观看| 成人欧美在线观看| 成人写真视频福利网| 精品国产区一区二区三区在线观看| 97成人精品区在线播放| www.久久久久久.com| 97久久超碰福利国产精品…| 国产午夜精品视频| 亚洲国产精品高清久久久| 国产一区二区香蕉| 国产精品自拍小视频| 日韩精品中文字幕视频在线| 国产精品在线看| 91国偷自产一区二区三区的观看方式| 国产精品免费视频久久久| 色青青草原桃花久久综合| 成人www视频在线观看| 日韩视频一区在线| 亚洲欧洲午夜一线一品| 2019精品视频| 久久精品国产99国产精品澳门| 久久久久国产精品www| 欧美亚洲国产日韩2020| 久久成人在线视频| 久久久久久久久久久久久久久久久久av| 国产精品视频不卡| 亚洲亚裔videos黑人hd| 97视频免费在线观看| 欧美性感美女h网站在线观看免费| 色妞色视频一区二区三区四区| 日韩中文字幕欧美| 久久精品99国产精品酒店日本| 国产这里只有精品| 日韩成人小视频| 亚洲成人aaa| 亚洲第一二三四五区| 国产精品夜色7777狼人| 91人人爽人人爽人人精88v| 日韩电影中文字幕在线观看| 97av在线播放| 欧美日产国产成人免费图片| 最好看的2019的中文字幕视频| 国产精品久久久91| 国产精品小说在线| 91在线视频导航| 韩国精品久久久999| 精品国产户外野外| 97人人爽人人喊人人模波多| 91精品91久久久久久| 欧美日韩国产限制| 中文字幕久精品免费视频| 最近2019中文字幕mv免费看| 久久久爽爽爽美女图片| 久久久久久久久久久亚洲| 久久av在线播放| 亚洲一区二区中文字幕| 51精品国产黑色丝袜高跟鞋| 亚洲自拍小视频| 亚洲国产婷婷香蕉久久久久久| 国产精品亚洲美女av网站| 国产成人精品免高潮在线观看| 一区二区成人av| 欧美日韩国产精品| 亚洲女同精品视频| 国产精品尤物福利片在线观看| 亚洲香蕉av在线一区二区三区| 成人春色激情网| 91国内精品久久| 九九热99久久久国产盗摄| 久久99精品国产99久久6尤物| 精品国产一区二区三区久久久| 欧美福利视频在线观看| 国产91对白在线播放| 亚洲丝袜在线视频| 国a精品视频大全| 国产成人亚洲综合| 久久久免费av| 色噜噜狠狠狠综合曰曰曰|