這篇文章發出來有段時間了
一
在項目開發中數據有效性驗證肯定是必須的
其它的細節問題
二
為了解決第一個問題和第二個問題
三
可能這一部分的內容可以讓你更直觀的了解這個驗證組件的一些原理和信息
第一步
第二步
cs頁面的代碼:
using Validator;
using My
public partial class _Default : System
{
protected ValidatorContainer vc;
protected void Page_Load(object sender
{
//是否開啟服務端驗證
bool isStartCheck = false;
if (Request[
{
/*
* 此處的bool值主要控制驗證容器處在何種狀態
* 狀態false
* 狀態true
*
isStartCheck = true;
}
//初始化驗證容器的集合
vc = new ValidatorContainer(isStartCheck);
//設置當前的驗證組(些處可以根據你自己的頁面邏輯來選擇驗證
vc
//獲取並驗證客戶端的數據
int month = vc
//參數說明
string userName = vc
string rePostDateString = vc
//注冊客戶端代碼到頁面中
vc
//判斷驗證是否通過
if (isStartCheck)
{
if (vc
{
//你頁面要做的邏輯
}
}
}
}
aspx頁面的調用代碼:
<head>
<!
<title>驗證器測試頁</title>
</head>
<body >
<form id=
<div>
<br />
請輸入出生月份
請輸入用戶昵稱
更新日期
<input type=
<!
A代表要驗證的組
</div>
</form>
</body>
</html>
上面這段代碼就實現了客戶端驗證代碼的注冊及調用
上面的調用上都寫了相關的注釋
//是否開啟服務端驗證
bool isStartCheck = false;
if (Request[
{
/*
* 此處的bool值主要控制驗證容器處在何種狀態
* 狀態false
* 狀態true
*
isStartCheck = true;
}
//初始化驗證容器的集合
vc = new ValidatorContainer(isStartCheck);
//設置當前的驗證組(些處可以根據你自己的頁面邏輯來選擇驗證
vc
上面這段代碼裡面是初始化開關條件變量以及初始化驗證器
配到
ValidatorContainer就只會生成客戶端代碼而不執行數據有效性驗證!
接下來再看下面的代碼
//獲取並驗證客戶端的數據
int month = vc
//參數說明
這個裡面我們可以看出來
Validator本身具備了Integer
所以要特別注意
Validator<int>
這小段代碼是為MyRequest
來獲取客戶端的一個提交值的
管它了
後面調用的Integer
RegClientValidator(string elementName);這個表示為html頁面中id或是name為elementName的html控件添加js驗證的腳本代碼
RegClientValidator(string elementName
默認的
如果不使用這個重載
然後講第三個重載:RegClientValidator(string elementName
這個重載前兩上參數都講過了
我代碼中
我們會自動生成一個div來顯示
注
接下來看
這個方法其實就是用來返回值的
然後再看這兩個方法
上面那個SetGroupName(
下面這個IsRequired(false)這個字面上應該也很好理解
好了
//注冊客戶端代碼到頁面中
vc
//判斷驗證是否通過
if (isStartCheck)
{
if (vc
{
//你頁面要做的邏輯
}
}
vc
有多關鍵
下面vc
差不多了
<input type=
客戶端的代碼生成後
沒有這一步的話
說了蠻多的
具體的實現
不哆嗦了
驗證器的其中一個驗證項方法:
#region 驗證數字(int
/// <summary>
/// 驗證數字(int
/// </summary>
/// <param name=
/// <returns></returns>
public Validator<T> Double(string errorMessage)
{
tempJsonString = new StringBuilder();
tempJsonString
tempJsonString
tempJsonString
jsonList
//判斷是否需要忽略驗證
if (ignore)
return this;
//驗證
if (!IsPattern(validatorRegexs[
{
this
}
return this;
}
#endregion
驗證容器的
Code
using System;
using System
using System
using Validator;
using System
using System
using System
using System
namespace Validator
{
[AspNetHostingPermission(SecurityAction
public class ValidatorContainer : IObserver
{
/// <summary>
/// 是否開啟驗證
/// </summary>
private bool isStartCheck;
/// <summary>
/// 驗證器所在頁對象
/// </summary>
private Page cPage;
/// <summary>
/// 客戶端驗證器對象名
/// </summary>
private string clientValidatorName;
/// <summary>
/// 驗證組名
/// </summary>
private string groupName;
/// <summary>
/// 錯誤數量
/// </summary>
//private int errorCount;
/// <summary>
/// 前台呈現腳本代碼
/// </summary>
private StringBuilder renderString;
/// <summary>
/// 驗證器列表
/// </summary>
private List<ISubject> validatorList;
/// <summary>
/// 是否開啟驗證
/// </summary>
public bool IsStartCheck
{
get { return isStartCheck; }
set { isStartCheck = value; }
}
/// <summary>
/// 客戶端驗證器對象名
/// </summary>
public string ClientValidatorName
{
get { return clientValidatorName; }
set { clientValidatorName = value; }
}
/// <summary>
/// 驗證組名
/// </summary>
public string GroupName
{
get { return groupName; }
set { groupName = value; }
}
#region 是否通過驗證
/// <summary>
/// 是否通過驗證
/// </summary>
public bool IsAllPass
{
get { return GetPassStat(); }
}
/// <summary>
/// 獲取驗證狀態
/// </summary>
/// <returns></returns>
private bool GetPassStat()
{
foreach (ISubject o in validatorList)
{
if (!o
return false;
}
return true;
}
#endregion
/// <summary>
/// 是否開啟驗證
/// </summary>
/// <param name=
public ValidatorContainer(bool _isStartCheck)
{
validatorList = new List<ISubject>();
clientValidatorName =
this
}
/// <summary>
/// 驗證器列表
/// </summary>
public List<ISubject> ValidatorList
{
get { return validatorList; }
set { validatorList = value; }
}
/// <summary>
/// 添加字符串驗證器
/// </summary>
/// <param name=
public Validator
{
if (this
if (this
_validator
validatorList
return _validator;
}
/// <summary>
/// 添加整數驗證器
/// </summary>
/// <param name=
public Validator
{
if (this
if (this
_validator
validatorList
return _validator;
}
/// <summary>
/// 獲取所有分組的驗證不通過數量
/// </summary>
/// <returns></returns>
public int GetErrorCount()
{
return
}
/// <summary>
/// 獲取某分組驗證不能過數目
/// </summary>
/// <param name=
/// <returns></returns>
public int GetErrorCount(string _groupName)
{
return
}
#region 實現觀察者接口
public void GetValidatorStat(ISubject subject)
{
//根據subject中的信息
//subject
//subject
//subject
//subject
}
#endregion
/// <summary>
/// 生成客戶端驗證json代碼
/// </summary>
/// <returns></returns>
public void RenderClinetValidator()
{
RenderClinetValidator(null);
}
/// <summary>
/// 是否存在頁面注冊區域
/// </summary>
/// <returns>存在的區域枚舉</returns>
private FormOrHeader GetRegisterRegion()
{
cPage = (Page)HttpContext
if (cPage
{
return FormOrHeader
}
else if (cPage
{
return FormOrHeader
}
return FormOrHeader
}
/// <summary>
/// 生成客戶端驗證json代碼
/// </summary>
/// <param name=
/// <returns></returns>
public void RenderClinetValidator(string _clientValidatorName)
{
FormOrHeader formOrHeader = GetRegisterRegion();
if (formOrHeader == FormOrHeader
throw new Exception(
//設置客戶端驗證對象名
if (!string
this
//按組名排序
validatorList
renderString = new StringBuilder();
renderString
renderString
renderString
renderString
renderString
renderString
renderString
int i =
string currentGroupName;
string preGroupName;
string nextGroupName;
int totalCount = validatorList
foreach (ISubject o in validatorList)
{
//設置組名
currentGroupName = validatorList[i]
preGroupName = validatorList[(i
nextGroupName = validatorList[(i +
if (i ==
renderString
if (currentGroupName != preGroupName)
{
renderString
renderString
}
i++;
renderString
if (i != validatorList
if (currentGroupName == nextGroupName)
renderString
}
renderString
renderString
renderString
//加載圖片
string imageTemplate =
LiteralControl imageUrlLiterl = new LiteralControl(string
cPage
//裝載樣式
string includeTemplate =
string includeLocation = cPage
LiteralControl includeLocationLiteral = new LiteralControl(String
//裝載js
string jsTemplate =
string scriptLocation = cPage
LiteralControl scriptLocationLiteral = new LiteralControl(String
if (formOrHeader == FormOrHeader
{
cPage
cPage
cPage
}
else
{
cPage
cPage
cPage
}
}
/// <summary>
/// 驗證所有組
/// </summary>
/// <returns>組驗證調用函數</returns>
public string Checked()
{
return Checked(
}
/// <summary>
/// 驗證特定組
/// </summary>
/// <param name=
/// <returns>組驗證調用函數</returns>
public string Checked(string _groupName)
{
string checkGroup =
if (!string
checkGroup = _groupName;
return clientValidatorName +
}
}
/// <summary>
/// Form或Header
/// </summary>
public enum FormOrHeader : byte
{
/// <summary>
/// 頭部
/// </summary>
Header
/// <summary>
/// 表單
/// </summary>
Form
/// <summary>
/// 無
/// </summary>
Null
}
}
集成在項目中的js的代碼我也不貼了
調用肯定只要引用Validator
代碼質量不高
真誠的感謝您抽時間來看我的文章!
謝了!
源碼發上來
From:http://tw.wingwit.com/Article/program/net/201311/13829.html