Tôi có Thuộc tính xác thực dữ liệu tùy chỉnh mà tôi đã tạo để đảm bảo mật khẩu mà người dùng nhập vào giống nhau, nhưng IsValid không bao giờ được gọi.Chú thích dữ liệu tùy chỉnh IsValid không bao giờ được gọi. (ASP.NET MVC 2 .NET 4)
Tuỳ thuộc tính:
public class IsSameAsAttribute : ValidationAttribute
{
public String TargetProperty { get; set; }
private readonly object _typeId = new object();
public IsSameAsAttribute(string targetProperty)
{
TargetProperty = targetProperty;
}
public override bool IsValid(object value)
{
return false;
//Type objectType = value.GetType();
//bool isValid = false;
//PropertyInfo[] neededProperties =
// objectType.GetProperties().Where(propertyInfo => propertyInfo.Name == TargetProperty).ToArray();
//return isValid;
}
public override object TypeId
{
get { return _typeId; }
}
}
mô hình dữ liệu nó được áp dụng cho:
public class RegistrationData
{
[Required(ErrorMessage = "First Name Required")]
[StringLength(100, ErrorMessage = "First Name must be 100 characters or less.")]
public String FirstName { get; set;}
[Required(ErrorMessage = "Last Name Required")]
[StringLength(100, ErrorMessage = "Last Name must be 100 characters or less.")]
public String LastName { get; set; }
[Required(ErrorMessage = "Email is Required")]
[StringLength(200, ErrorMessage = "Email must be 200 characters or less.")]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "Valid Email Address is required.")]
public String Email { get; set; }
[Required(ErrorMessage = "Password is required")]
public String Password { get; set; }
[IsSameAs("Password")]
public String PasswordRepeat { get; set; }
[Required(ErrorMessage = "Division is required")]
public String Division { get; set; }
}
Và Controller nơi nó được gọi là từ:
[HttpPost]
public ActionResult ValidationDemo(RegistrationData model)
{
if (ModelState.IsValid)
{
return Redirect("/");
}
return View(model);
}
Tất cả xác thực "ngoài hộp" hoạt động chính xác, nó chỉ là tùy chỉnh của tôi không được gọi. Trong khi thực hiện gỡ lỗi, tôi thấy rằng nó được khởi tạo khi hàm tạo được gọi, nhưng một điểm ngắt trên IsValid không bao giờ được nhấn.
Điều gì đang diễn ra và cách khắc phục sự cố?
CẬP NHẬT
Được rồi tôi fiddled số và nếu tôi gọi TryUpdateModel (mô hình) trong bộ điều khiển của tôi nó cuối cùng gọi IsValid. Vì vậy, điều này ngụ ý với tôi rằng thuộc tính tùy chỉnh của tôi không nhận được "đăng ký" với bất cứ điều gì chạy xác nhận trong MVC 2. Có cách nào để giải quyết vấn đề này?
[HttpPost]
public ActionResult ValidationDemo(RegistrationData model)
{
TryValidateModel(model); // <--- *** Added this line and it "works"
if (ModelState.IsValid)
{
return Redirect("/");
}
return View(model);
}
Bạn đã đăng ký bộ điều hợp để sử dụng cùng với thuộc tính xác thực tùy chỉnh của bạn với 'DataAnnotationsModelValidatorProvider.RegisterAdapter'? –