Làm cách nào để tôi viết về một ValidationAttribute tùy chỉnh so sánh hai trường? Đây là trường hợp "nhập mật khẩu" phổ biến, "xác nhận mật khẩu". Tôi cần đảm bảo hai trường đều bình đẳng và giữ cho mọi thứ nhất quán, tôi muốn triển khai xác thực thông qua DataAnnotations.Sử dụng DataAnnotations để so sánh hai thuộc tính mô hình
Vì vậy, trong pseudo-code, Tôi đang tìm kiếm một cách để thực hiện một cái gì đó như sau:
public class SignUpModel
{
[Required]
[Display(Name = "Password")]
public string Password { get; set; }
[Required]
[Display(Name = "Re-type Password")]
[Compare(CompareField = Password, ErrorMessage = "Passwords do not match")]
public string PasswordConfirm { get; set; }
}
public class CompareAttribute : ValidationAttribute
{
public CompareAttribute(object propertyToCompare)
{
// ??
}
public override bool IsValid(object value)
{
// ??
}
}
Vậy câu hỏi là, làm thế nào để viết mã [So sánh] ValidationAttribute?
Trong trường hợp này, bạn có thể tự lưu thuộc tính Bắt buộc cho thuộc tính thứ hai vì bạn đã thực thi so sánh với thuộc tính đầu tiên thực tế bắt buộc. –
Lưu ý rằng, với C# 6.0, bây giờ có thể sử dụng từ khóa 'nameof', thay vì sử dụng" chuỗi ma thuật "làm tên thuộc tính.Điều này làm cho việc tái cấu trúc tốt hơn/dễ dàng hơn của bất kỳ thuộc tính liên quan nào, vì nó đang sử dụng tên thuộc tính gõ mạnh, thay vào đó (và tiết kiệm cho bạn phải nhớ cập nhật chuỗi ma thuật (như tôi đã thực hiện một vài lần)). Thêm vào đó, trình biên dịch sẽ bị lỗi nếu bạn đã từng bỏ lỡ một, bằng cách nào đó - do đó làm cho nó "dễ dàng". Ví dụ sử dụng theo câu trả lời của @ Janx: '[CompareAttribute (nameof (NewPassword), ErrorMessage =" Mật khẩu không khớp. ")]' –