1. 添加引用:
System.ComponentModel.DataAnnotations.dll
2. 拿登陸驗證參數爲例:創建模型LoginUser;
1)在需要驗證的字段上邊添加特性,如
[Required(ErrorMessage ="用戶名不允許爲空")]
2)繼承IValidatableObject 是爲了重寫Validate,實現在某種條件下觸發驗證code不爲空。
public class LoginUser : IValidatableObject
{
[Required(ErrorMessage ="用戶名不允許爲空")]
public string username { get; set; }
[Required(ErrorMessage ="密碼不允許爲空")]
[StringLength(10, ErrorMessage = "字符長度過長")]
public string password { get; set; }
public string code { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
LoginUser userModel = validationContext.ObjectInstance as LoginUser;
if (userModel==null)
{
yield break;
}
bool isValidCode= true;
if (isValidCode && string.IsNullOrWhiteSpace(code))
{
yield return new ValidationResult("驗證碼不允許爲空", new string[] { code });
}
}
}
3. 接下來就是驗證;
1)增加輔助驗證類
public static class ValidatetionHelper
{
public static ValidResult IsValid(object value)
{
ValidResult result = new ValidResult();
try
{
var validationContext = new ValidationContext(value);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(value, validationContext, results, true);
if (!isValid)
{
result.IsVaild = false;
result.ErrorMembers = new List<ErrorMember>();
foreach (var item in results)
{
result.ErrorMembers.Add(new ErrorMember()
{
ErrorMessage = item.ErrorMessage,
ErrorMemberName = item.MemberNames.FirstOrDefault()
});
}
}
else
{
result.IsVaild = true;
}
}
catch (Exception ex)
{
result.IsVaild = false;
result.ErrorMembers = new List<ErrorMember>();
result.ErrorMembers.Add(new ErrorMember()
{
ErrorMessage = ex.Message,
ErrorMemberName = "Internal error"
});
}
return result;
}
public class ValidResult
{
public List<ErrorMember> ErrorMembers { get; set; }
public bool IsVaild { get; set; }
}
public class ErrorMember
{
public string ErrorMessage { get; set; }
public string ErrorMemberName { get; set; }
}
}
2)使用驗證類進行驗證
public ActionResult Login(LoginUser user)
{
//驗證參數
var result = ValidatetionHelper.IsValid(user);
if (!result.IsVaild)
{
return JsonMsg(false, result.ErrorMembers.FirstOrDefault().ErrorMessage);
}
//驗證登陸
//...
}
到此,驗證參數如何使用已經演示完畢!除了不爲空還有其他的特性可以查閱資料或自己重寫。