[C#][ASP.NET] Validation DropdownList FileUpload sample
本文主要自己記錄幾個常用的資料驗證模式。雖然現在很多都改用JavaScript的方式處理,但是ASP.NET中的驗證控制項,也很好用。
因為很常用!! 這裡實作幾個例子,讓自己記錄一下。有下拉選單,跟上傳檔案、還有自訂認證的方式。
通常資料的驗證分為前端與後端驗證,利用驗證來確保資料輸入時的正確性。
ASP有以下幾種驗證方式:
CompareValidator | 使用比較運算子,將使用者的資料與固定數值相比。也可以與相同網頁內其他控制項的屬性數值相比。 |
CustomValidator | 利用程式定義之驗證邏輯來檢查使用者資料的正確性。當其他的驗證元件無法執行所需的驗證,以及當你想要使用自訂的程式碼來驗證輸入的時候,便可以使用這個驗證元件。 |
RangeValidator | 確保使用者的資料落在指定的範圍內。上限和下限可以數字、字串或日期加以表示。 |
RegularExpressionValidator | 使用規則運算式所定義的樣式來驗證使用者的資料。 |
RequiredFieldValidator | 確保使用者為必要欄位填入數值。 |
ValidationSummary 這個控制項本身並未執行驗證工作,它只會顯示一個文字標籤,用來總結網頁上的所有驗證錯誤訊息。
範例只有用到 RegularExpressionValidator、RequiredFieldValidator、CustomValidator 還有ValidationSummary
首先建立一個aspx的頁面
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Validation.aspx.cs" Inherits="Validation" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="請輸入日期" ValidationGroup="VG1" Display="None"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="日期格式錯誤(yyyymmdd)"
ValidationExpression="^(19|20)\d\d(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])$" ValidationGroup="VG1" Display="None"></asp:RegularExpressionValidator>
</td>
</tr>
<tr>
<td>
<asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="DropDownList1" runat="server" ErrorMessage="選單項目未選擇"
InitialValue="0" ValidationGroup="VG1" Display="None"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="FileUpload1" ErrorMessage="請選擇檔案" ValidationGroup="VG1" Display="None"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="CustomValidator2" runat="server" ControlToValidate="FileUpload1" ErrorMessage="檔案已經存在"
OnServerValidate="CustomValidator2_ServerValidate" ValidationGroup="VG1" Display="None"></asp:CustomValidator>
</td>
</tr>
<tr>
<td>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="VG1" />
</td>
</tr>
<tr>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" ValidationGroup="VG1" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
這裡利用到幾個屬性的設定:
- 為了讓使用者在驗證時,可以有直接區域可以瀏覽,所以用了ValidationSummary,並設定一個驗證的群組 ValidationGroup="VG1"
- 因為用了ValidationSummary,所以一般顯示錯誤訊息的部分,也將屬性設定為 Display="None"
- 下拉選單的部分,為了讓使用者要有選擇,所以在綁定資料時,有加上1組Value = 0 ,Text ="請選擇" 的資料,並在前端網頁設定 InitialValue="0" ,讓除了0以外的值,才會被驗證通過。
.cs 頁面內容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Validation : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ddl_list();
}
protected void CustomValidator2_ServerValidate(object source, ServerValidateEventArgs args)
{
//假設上傳的檔案名稱 == 123.pdf
if (FileUpload1.FileName == "123.pdf")
{
//驗證不通過
args.IsValid = false;
}
else
{
//驗證通過
args.IsValid = true;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Page.IsValid)//在Click事件中透過Page.IsValid即可取得伺服器端的驗證結果,很重要一定要加。
{
ShowMsg("OK");
}
}
//建立下拉選單
protected void ddl_list()
{
for (var i = 1; i <= 3; i++)
{
var item = new ListItem
{
Text = "選單" + i.ToString(),
Value = i.ToString()
};
DropDownList1.Items.Add(item);
}
DropDownList1.Items.Insert(0, new ListItem("請選擇", "0"));
}
protected void ShowMsg(string msg)
{
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "Msg", "alert('" + msg + "');", true);
}
}
自訂認證其實是可以處理很多的特殊項目,就看自己怎麼發揮嚕!!!
相關各種驗證的屬性資料可以參閱 余小章 @ 大內殿堂 中的資料,裡面寫得非常詳細(所以我就偷懶..放上連結嚕)。
水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。