Làm cách nào để tạo thuộc tính xác thực tùy chỉnh với xác thực phía máy khách mà không triển khai IClientValidatable
?ASP.NET MVC: Triển khai xác thực phía máy khách với thuộc tính mà không IClientValidatable
Làm cách nào để System.ComponentModel.DataAnnotations.RequiredAttribute
phía khách hàng xác thực?
Lý do để làm điều này là vì tôi đang sử dụng các đối tượng từ các lớp trong một dự án khác làm mô hình trong quan điểm của tôi và tôi không muốn thêm tham chiếu System.Web.MVC
vào dự án đó.
EDIT để thêm thông tin:
Tôi biết rằng
IClientValidatable
được sử dụng để thêm thuộc tính tùy chỉnh để HTML để được sử dụng sau bằng cách xác nhận không phô trương.Tôi biết tôi cần thêm mã javascript để thực hiện xác thực trong khách hàng.
Điều tôi không biết là cách sử dụng thông tin từ thuộc tính xác thực tùy chỉnh để thêm thuộc tính cần thiết vào HTML để xác thực không hoạt động.
Đây là thuộc tính xác nhận tùy chỉnh của tôi:
public class RequiredGuidAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
Guid? guidValue = value as Guid?;
if (guidValue == null)
return false;
return guidValue != Guid.Empty;
}
}
Đây là tài sản của tôi với thuộc tính áp dụng:
[RequiredGuid(ErrorMessageResourceType = typeof(ClientOrderResources), ErrorMessageResourceName = "RequiredShippingMethod")]
public Guid ShippingMethodId
{
get { return GetProperty(ShippingMethodIdProperty); }
set { SetProperty(ShippingMethodIdProperty, value); }
}
Và cuối cùng tôi vẽ một đầu vào ẩn cho tài sản trong quan điểm cho rằng sử dụng Html.HiddenFor
.
Bây giờ, làm thế nào tôi có thể nhận được thông báo lỗi từ thuộc tính để áp dụng nó vào HTML? Tôi có nên tự làm bằng cách sử dụng Reflection hoặc có cách nào tốt hơn không?
Và sau đó làm cách nào tôi có thể yêu cầu Html.HiddenFor
sử dụng thông tin đó để thêm các thuộc tính cần thiết vào HTML?
Tôi xin lỗi nhưng nó phải là một cách, bởi vì các thuộc tính từ DataAnnotations được công nhận bởi những người trợ giúp html và họ xuất html với các thuộc tính cần thiết để xác thực khách hàng. Tôi biết rằng tôi sẽ phải thêm tập lệnh của khách hàng và đó không phải là một vấn đề. – Marques