2012-04-15 31 views
14

tôi có mô hình sau:Nhiều lĩnh vực xác nhận sử dụng Validation từ xa

public class Customer 
{ 
    public string FirstName {get;set;} 

    public string LastName {get; set;} 

    [Remote("CardExisting", "Validation", AdditionalFields="FirstName,LastName") 
    public string CardNumber {get; set;} 
} 

hành động CardExisting sẽ kiểm tra rằng có một kỷ lục hiện tại cho sự kết hợp của cardNumber cho firstName và LastName. Điều gì sẽ xảy ra nếu người dùng lần đầu tiên nhập số thẻ và sau đó tên của anh ấy, tôi không thể xác thực anh ấy, vì vậy khi anh ấy trả lại và nhập tên của anh ấy, tôi cần xác thực từ xa một lần nữa, tôi có thể làm như thế nào khi tiêu điểm đã bị mất từ ​​thẻ bất động sản?

Trả lời

3

Cách tôi đã làm việc này là bằng cách thêm một số JavaScript.

$("#FirstName").change(function() { 
     $('#CardNumber').removeData('previousValue'); 
     $('#CardNumber').valid(); 
    }); 

Vì vậy, khi tên đầu tiên được thay đổi, bạn xóa mọi giá trị trước đó khỏi số thẻ và xác thực lại số thẻ.

20

Mở rộng câu trả lời của Jaluka, tôi đã viết phương thức trợ giúp tìm thấy từng phần tử xác thực từ xa có "trường bổ sung" và sau đó xác thực yếu tố đã nói để kích hoạt mỗi khi một trong các trường đó thay đổi.

// I hate naming things 
function initializeRemotelyValidatingElementsWithAdditionalFields($form) { 
    var remotelyValidatingElements = $form.find("[data-val-remote]"); 

    $.each(remotelyValidatingElements, function (i, element) { 
     var $element = $(element); 

     var additionalFields = $element.attr("data-val-remote-additionalfields"); 

     if (additionalFields.length == 0) return; 

     var rawFieldNames = additionalFields.split(","); 

     var fieldNames = $.map(rawFieldNames, function (fieldName) { return fieldName.replace("*.", ""); }); 

     $.each(fieldNames, function (i, fieldName) { 
      $form.find("#" + fieldName).change(function() { 
       // force re-validation to occur 
       $element.removeData("previousValue"); 
       $element.valid(); 
      }); 
     }); 
    }); 
} 

Gọi chức năng như vậy:

$(document).ready(function() { 
    initializeRemotelyValidatingElementsWithAdditionalFields($("#myFormId")); 
}); 
+1

W00t !!! Hai ngày trước, bạn đã trả lời câu hỏi này và tôi cần nó ngay bây giờ ... mã của bạn hoạt động tuyệt vời! :) Trong trường hợp của tôi, tôi có 2 dropdowns mà phải làm việc cùng nhau, đó là, một là lĩnh vực bổ sung khác. Giải pháp tuyệt vời cho một cái gì đó nên được mặc định IMHO. :) –

+0

hehehe Tôi cũng không thích đặt tên cho mọi thứ ... nhưng với bản chất của nghề nghiệp của chúng tôi nó vốn cần thiết nhiều lần trong ngày! : D –

+0

Cảm ơn, giải pháp này cũng làm việc tốt cho MVC4. –

2

nếu bạn không thích để tạo ra các kịch bản client:

public class Customer 
    { 
     [Remote("CardExisting", "Validation", AdditionalFields = "CardNumber,LastName")] 
     public string FirstName { get; set; } 
     [Remote("CardExisting", "Validation", AdditionalFields = "FirstName,CardNumber")] 
     public string LastName { get; set; } 
     [Remote("CardExisting", "Validation", AdditionalFields = "FirstName,LastName")] 
     public string CardNumber { get; set; } 
    } 

Và xác nhận trong CardExisting tất cả các lĩnh vực được làm đầy hay không

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