日期: 2023.10.26 星期二
使用者資料驗證
前言
為避免使用者輸入錯誤的資料,進入資料庫處裡,所以須有資料驗證的功能來確保資料是正確的,不同的程式會使用不同的技術,針對 WebForm 技術,微軟 已建立好一些控制項來做資料驗證功能。
實例說明
-
欄位一定需有值,否則報錯
- 建立一
WebForm1,介面提供Label*1(Label1),TextBox*1(TextBox2),Button*1(Button1) - Label1.Text = "Name"
- 點擊工具箱項目,選取驗證,選取RequiredFieldValidator,將該控制項元件拖曳至報錯時欲顯示位置,這裡放在
TextBox1右邊。 - 修改 RequiredFieldValidator 的屬性:
ErrorMessage=Require input your name# 錯誤訊息提示ForeColor=Red# 字體顏色ControlToValidate=TextBox1# 指定欲控制哪一欄位要做驗證
- 儲存專案,執行該
WebForm1會報錯。 - 解決方法
- RequiredFieldValidator 的屬性,將
EnableClientScript改設為False。
不在Client 端檢查資料,資料送出後,交由Server端檢查資料。
因為EnableClientScript設為True時,意指讓Client端的Script可以執行,Asp.NET引擎會依據這控制項RequiredFieldValidator下載JS程式,當於輸入框你輸入完內容時會自動做驗證(Server端下載該JS程式碼給Client端),Client端的Browser會去執行這程式碼,直接幫你做驗證動作,驗證有無資料,無資料就報錯,有資料就提交資料出去,這功能需有JQuery,沒有的話Client會掛掉。
重新執行該專案,在輸入框無輸入資料時,滑鼠點擊外側任一位置時,Client處不作驗證,交由伺服器端做驗證(在按下按鈕後)。 - RequiredFieldValidator 的屬性,將
EnableClientScript設為True。
網站上先行安裝jQuery套件,使用NuGet套件管理工具(工具 >NuGet套件管理員 > 管理方案的NuGet套件)
[瀏覽] > 搜尋scriptmanager找出script的相關套件,選擇AspNet.ScriptManager.jQuery,右側視窗勾選欲安裝在哪一個專案上。按下安裝會下載指定套件到專案的方案總管內。安裝完畢後會看到專案將多一資料夾Scripts。
重新執行該專案,在輸入框無輸入資料時,滑鼠點擊外側任一位置時,在Client直接執行Script檢查資料,並沒有送到伺服器做驗證。
- RequiredFieldValidator 的屬性,將
- 建立一
-
驗證欄位值,一定範圍(
10~80)- 在
WebForm1,介面提供Label*1(Label2),TextBox*1(TextBox2),Button*1(Button2) - Label2.Text = "Age"
- 點擊工具箱項目,選取驗證,選取RangeValidator,將該控制項元件拖曳至報錯時欲顯示位置,這裡放在
TextBox2右邊。 - 修改 RangeValidator 的屬性:
ErrorMessage=10~80# 錯誤訊息提示ForeColor=Red# 字體顏色ControlToValidate=TextBox2# 指定欲控制哪一欄位要做驗證EnableClientScript=False# Client 不做驗證、交由伺服器端去驗證(在按下按鈕後)MaxmunValue=10# 輸入資料最大值MinmunValue=80# 輸入資料最小值Type=Intrger# 指定輸入資料類型,驗證控制項會將輸入的資料字串先傳成整數在去作範圍驗證
- 在
-
驗證欄位值,一定範圍(
10~80)的驗證,輸入小於10顯示太小數值,輸入大於80顯示太大數值。
因為驗證是在伺服器端作,所以就可以改變驗證的錯誤訊息,不管哪一模式,按下按鈕後,伺服器都會驗證資料所以:``c# protected void Button1_Click(object sender, EventArgs e){ //假設只有 Age 欄位會出錯 //須先作 if 判斷,因為資料驗證時機在於 物件已產生後,接著所有Page_Load事件也執行完畢,接著就會執行所有的驗證,所以驗證工作是在所有事件被執行之前執行,所有驗證都執行完畢, //這網頁有一個屬性:Validate當所有驗證都成功時它才會是True`
//this 即指 Page
//Name 不會錯因 Client 端有先作驗證,這裡只有 Age 因它是在伺服端執行驗證的
//驗證有錯
if(!this.IsValid){
//判斷是否 TextBox2 的輸入值大於 RangeValidator 屬性設定的最大值
if ( Int32.parse(TextBox2.Text) > Int32.Parse(RangeValidator.MaximumValue) ){
RangeValidator1.ErrorMessage = "Too Large";
}else{
RangeValidator1.ErrorMessage = "Too Small";
}
}
}> 這方法只能用在伺服起端,Client 端不可以作 -
驗證
Email格式
使用Regular Expression(正規表達式)使用特定的字串 Pattern(樣式),- 在
WebForm1,介面提供Label*1(Label3),TextBox*1(TextBox3),Button*1(Button3) - Label3.Text = "Email"
- 點擊工具箱項目,選取驗證,選取RegularExpressionValidator,將該控制項元件拖曳至報錯時欲顯示位置,這裡放在
TextBox3右邊。 - 修改 RegularExpressionValidator 的屬性:
ErrorMessage=Wrong Email Format# 錯誤訊息提示ForeColor=Red# 字體顏色ControlToValidate=TextBox3# 指定欲控制哪一欄位要做驗證EnableClientScript=False# Client 不做驗證、交由伺服器端去驗證(在按下按鈕後)ValidationExpression=網際網路電子郵件地址# 驗證格式
- 在
- 驗證
Password兩次- 在
WebForm1,介面提供Label*2(Label4、Label5),TextBox*2(TextBox4、TextBox5),Button*1(Button4) - Label4.Text = "Password",Label5.Text = "Retype"
- 點擊工具箱項目,選取驗證,選取CompareValidator,將該控制項元件拖曳至報錯時欲顯示位置,這裡放在
TextBox5右邊。 - 修改 CompareValidator 的屬性:
ErrorMessage=Password Inconsistent# 錯誤訊息提示ForeColor=Red# 字體顏色ControlToCompare=TextBox4# 指定要跟哪一控制項作比較password(TextBox4)ControlToValidate=TextBox5# 指定哪一欄位要做驗證retype(TextBox5)Operator=Equal# 比較的運算子EnableClientScript=False# Client 不做驗證、交由伺服器端去驗證(在按下按鈕後)
- 修改
TextBox4與TextBox5的屬性TextMode=Password# 隱藏輸入資料
- 在
工具箱的控制項中有一 Calender 現在可能用不到,因早期 Html1 ~ Html4 的版本並沒有 Calender 標籤可使用,但 HTML5 中有 <input type="date"> 可以產生月曆
過去的做法是:
-
建立
WebForm,UI如下:TextBox1Button1Calender1
-
讓
Calender1不顯示:Calender.Visible = False。 當未按下按鈕時,不應該出現月曆。 -
點擊
Button1時,讓月曆出現protected void Button1_Click(object sender, EventArgs e){ Calender1.Visible = true; }
現在的做法:
-
建立
WebForm,UI如下:TextBox1Button1
TextBox1設定屬性TextMode=Date後,瀏覽器就會執行這月曆的功能。
資料庫
案例: 登入使用者註冊帳號、密碼
資料庫建立
- 伺服器總管視窗若沒出現時: 執行檢視 > 伺服器總管

-
選擇左下視窗上的伺服器總管後然後選擇項目: 伺服器下的資料連接

滑鼠右鍵選擇- 加入連接: 其他的資料庫型態連接時,選此項。
- 建立新的
SQL Server資料庫: 如果是使用MSSQL資料庫,就直接使用這項目,
這裡選擇加入連接

出現

-
加入連接:
Microsoft Access資料庫檔案: 個人版的資料庫Microsoft ODBC資料來源: 想與DB2或MySQL資料庫連接時,選此項。 像是一個MiddlewareMicrosoft SQL Server: 選此項。Microsoft SQL Server(SqlClient)Microsoft SQL Server資料庫檔案: 資料會直接存在網站上的檔案Oracle Database:- <其他>:
這裡選擇
Microsoft SQL Server

- 加入連接
- 資料來源:
Microsoft SQL Server(SqlClient) - 伺服器名稱: 過去不同版本伺服器名稱寫法不同,但後來只要是連接本地端資料庫寫法都是:
(localdb)mssqllocaldb,不然就是主機IP - 登入伺服器:
- 驗證
Windows 驗證(只要能登入的使用者都可以使用)SQL Server 驗證: 正式用需帳密Active Directory 密碼驗證Active Directory 整合式驗證
這裡選用:Windows 驗證
- 驗證
- 連接至資料庫:
- 選取或輸入資料庫名稱: 若連接設定正常,就可以看到有哪些資料庫 (
master、model、msdb、tempdb),這裡給一新資料庫名稱im,按下是來建立該資料。這時資料連接下面會產生一先資料庫。

- 附加資料庫檔案
按下測試連接,若沒問題,就可按下確定。

- 選取或輸入資料庫名稱: 若連接設定正常,就可以看到有哪些資料庫 (
- 資料來源:
-
資料表建立
資料表上,按下滑鼠右鍵,選擇加入新的資料表。界面:
名稱資料型別 允許 Null 預設值 U_ID varchar(30) U_Pass varchar(50) T-SQL:CREATE TABLE [dbo].[USERS] ( [U_ID] VARCHAR(30) NOT NULL, [U_Pass] VARCHAR(50) NOT NULL, CONSTANT [PK_Table] PRIMARY KEY ([U_ID]) )[]中括號目的是名稱有空白時,dbo(databse owner),以 dbo 身分操作此資料庫, [Table] 手動改成 [Users] 為資料表名稱點擊 更新 讓資料庫管理系統來執行你的
T-SQL指令。
接下來會詢問要作下面哪一動作:- 產生指令碼: 把剛剛指令給你,自己在丟給資料庫管理系統
- 更新資料庫: 直接把指令丟給資料庫管理系統,讓它執行
T-SQL指令。 選此項 - 取消:
伺服器總管左上角點擊後,就會更新資料庫最新狀態的資料,更新後就可以看到資料表
Users被產生了。 -
新增資料
選擇資料表Users後,點擊滑鼠右側,選擇顯示資料表資料,然後在出現視窗上開始編輯與新增資料U_ID U_Pass 1234 1234 abcd abcd 打完一筆資料庫管理系統自動將這筆資料寫入資料庫,可以按下左上角確認內容,刪除可以顯取該筆後,點擊滑鼠右鍵後選擇刪除。
留言