2013-10-09 17 views
5

Tôi có một biểu mẫu có hai trường ngày, Ngày bắt đầu và Ngày kết thúc. Tôi muốn xác thực hai trường để đảm bảo Ngày bắt đầu vào hoặc trước Ngày kết thúc. Tôi đã viết một trình xác nhận hợp lệ từ xa và gán nó cho cả hai trường, nhưng điều đó có thể dẫn đến nhiều thông báo cho cùng một lỗi. Ngoài ra, nếu tôi sửa một ngày xác thực không kích hoạt trên trường chưa sửa đổi để lại thông báo lỗi cũASP.Net MVC Xác thực phạm vi ngày không phô trương

Làm cách nào để xác thực hai trường ngày với nhau để xác minh ngày bắt đầu trước hoặc vào ngày kết thúc?

Trả lời

2

Tôi đã gặp sự cố tương tự vài tuần trước. IMHO Tôi nghĩ rằng cách tốt nhất để giải quyết vấn đề là thực hiện một điều khiển phía máy khách bằng cách sử dụng jquery. Bằng cách này, bạn có thể gọi xác thực mỗi khi bạn thay đổi giá trị vào ngày bắt đầu hoặc ngày kết thúc. Trong trường hợp này, tốt hơn là gọi cho máy chủ để xác thực dữ liệu của bạn trên máy khách bởi vì bạn không gọi máy chủ.

Trong liên kết sau có một quy trình để thực hiện xác thực phía máy khách. Link

Đây là giải pháp của tôi:

Bước 1: Tạo Lớp thuộc tính để xác nhận ngày liên tiếp

public class ConsecutiveDateAttribute : ValidationAttribute, IClientValidatable 
{ 
    public ConsecutiveDateAttribute() 
    { 
     ErrorMessage = "The date must be consecutive"; 
    } 

    public override bool IsValid(object value) 
    { 
     return true; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule(); 
     rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()); 
     rule.ValidationParameters.Add("datefield", metadata.PropertyName); 
     rule.ValidationType = "consecutivedate"; 
     yield return rule; 
    } 
} 

IsValid phương pháp trở lại luôn luôn đúng bởi vì tôi muốn để xác nhận các giá trị trên khách hàng- bên. Hàm GetClientValidationRules được sử dụng để chuyển tới trang cshtml tên trường và tên xác thực của cặp vợ chồng để gọi xác thực cho từng trường.

Bước 2: Trang trí với các thuộc tính ConsecutiveDate các lĩnh vực mà tôi muốn xác nhận

[Required(), DataType(DataType.Date), ConsecutiveDate()] 
    public DateTime StartDate { get; set; } 

    [Required(), DataType(DataType.Date), ConsecutiveDate()] 
    public DateTime EndDate { get; set; } 

Bước 3: Thực hiện trong trang javascript để xác nhận ngày

<script src="@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript" /> 
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript" /> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 

<script type="text/javascript"> 

    if ($.validator && $.validator.unobtrusive) { 

     $.validator.unobtrusive.adapters.addSingleVal("consecutivedate", "datefield"); 

     $.validator.addMethod("consecutivedate", function(value, element) { 

      if ($("#StartDate").val() != "" && $("#EndDate").val() != "") 
       return $("#StartDate").val() <= $("#EndDate").val(); 

      // IF both values are not polupated I don't want to validate the field 
      return true; 
     }); 

    } 
</script> 

$ .validator. addMethod ("consecutivedate", chức năng (giá trị, phần tử): điều này đăng ký xác thực cho từng trường mà tôi muốn xác thực.

+0

Bao gồm nội dung của liên kết tại đây. Vui lòng – deW1

+0

Tôi xin lỗi là câu trả lời đầu tiên của tôi. Nextone sẽ hoàn chỉnh hơn. Cảm ơn phản hồi của bạn. –

Các vấn đề liên quan