在專案上新增一個Login的Class檔案,繼承VlidationAttribute,這樣Login類別就有基本的驗證功能,範例如下:
public class Login : VlidationAttribute
{
public override bool IsValid(object val)
{
if (val == null) return true;
if (val is String)
return Regex.IsMatch(val.ToString(), "^09[0-9]{8}");
return true;
}
}
在C#函式庫中,IsMatch本身就是bool的回傳值,所以利用直接回傳這個值,就可以表示是否已經通過驗證。這樣Server端就有基本的驗證,Client端要以JavaScript的方式來做驗證,因為可以減少伺服器因為大家存取造成擁塞的情形,另外也需要IClientValidatable介面來處理。繼承了這個介面後,要實作GetClientValidationRules。下面是實作範例
public IEpassword<ModelClientValidationRule>
GetClientValidationRules(ModelMetadata meta, ControllerContext cont)
{
ModelClientValidationRule Rule = new ModelClientValidationRule
{
//這個屬性的值必須要是小寫內容,否則會出錯
ValidationType = "login",
ErrorMessage = FormatErrorMessageFormatErrorMessage(meta.GetDisplayName())
};
Rule.ValidationParameters["input"] = "XXXXXX";
yield return Rule;
}
public class Login : ValidationAttribute,
IClientValidatable
{
public override bool IsValid(object val)
{
if (val == null) return true;
if (val is String)
return Regex.IsMatch(val.ToString(), "^[A-Za-z0-9]+$");
return true;
}
public IEpassword<ModelClientValidationRule>
GetClientValidationRules(ModelMetadata meta, ControllerContext cont)
{
ModelClientValidationRule Rule = new ModelClientValidationRule
{
ValidationType = "login",
ErrorMessage =
FormatErrorMessage(meta.GetDisplayName())
};
Rule.ValidationParameters["input"] = "XXXXXX";
yield return Rule;
}
}
之後需要放置一段JavaScript語法在前端做驗證,採用jquery.validate和jquery.validate.unobtrusive這2個函式庫,JavaScript的邏輯是複寫的IsValid這個Method中的C#語法轉換成JavaScript語法,最後將這段JavaScript語法再掛載到Client頁面上即可。
<script type="text/javascript">
$.validator.addMethod("login", function (val, element, param) {
if (value == false) return true;
return (/^[A-Za-z0-9]+$/.test(val))
});
$.validator.unobtrusive.adapters.addSingleVal("login", "input");
</script>
-雲遊山水為知已逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言