我想讓客戶端驗證與我的自定義數據註解一起工作,我面臨的問題是,每當我有一個非必需的實體並提交我的請求(離開NON - 必填字段空白),我的代碼的客戶端部分踢進來,並嘗試驗證空白!我怎樣才能避免這種情況? 含義,如果用戶沒有輸入任何內容,那麼不要驗證?自定義數據註釋 - 客戶端驗證
謝謝!
客戶端代碼:
$.validator.addMethod("emailvalid", function (value, element, params) {
var regex = /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~][email protected]((((([a-zA-Z0-9]{1}[a-zA-Z0-9\-]{0,62}[a-zA-Z0-9]{1})|[a-zA-Z])\.)+[a-zA-Z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/;
return regex.test(value);
});
$.validator.unobtrusive.adapters.addBool("emailvalid");
服務器端代碼:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class EmailValidAttribute : ValidationAttribute, IClientValidatable
{
private Regex Regex { get; set; }
private string pattern {
get {
return @"^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~][email protected]((((([a-zA-Z0-9]{1}[a-zA-Z0-9\-]{0,62}[a-zA-Z0-9]{1})|[a-zA-Z])\.)+[a-zA-Z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$";
}
}
public EmailValidAttribute(string errorMessage)
: base(errorMessage)
{
this.Regex = new Regex(this.pattern);
}
public override bool IsValid(object value)
{
var stringValue = Convert.ToString(value);
// automatically pass if value is null or empty. RequiredAttribute should be used to assert an empty value
if (string.IsNullOrWhiteSpace(stringValue))
{
return true;
}
var m = Regex.Match(stringValue);
// looking for an exact match, not just a search hit
return (m.Success && (m.Index == 0) && (m.Length == stringValue.Length));
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule();
rule.ValidationType = "emailvalid";
rule.ErrorMessage = ErrorMessageString;
yield return rule;
}
}
完全忘記了這樣一個真棒功能,修剪!謝謝你,完美的作品:) – Jose
如果你的目標用戶滿足瀏覽器要求(IE9 +),你可以使用內建的'String.trim()'函數。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim – Vache