2012-02-28 28 views
10

Tôi đang cố gắng bật xác thực javascript không phô trương cho các mục được tạo động. Vấn đề với javascript đã được giải quyết trong một câu hỏi SO khác và đây không phải là trường hợp ở đây.ASP.NET MVC Unobtrusive validation - tại sao ngữ cảnh dạng là cần thiết?

Tạo động mục trong trường hợp này chỉ là nhân bản của một mục trống được tạo bên ngoài biểu mẫu chính.

Vấn đề là nếu tôi sử dụng trình trợ giúp html như TextBoxFor, CheckBoxFor, ... bên ngoài phần tử biểu mẫu html thì thuộc tính bắt buộc để xác thực hoạt động (ví dụ: data-val-required) không được tạo.

Tôi đã kiểm tra mã nguồn MVC và có một dòng trả về danh sách thuộc tính trống nếu FormContext là null. (điều này không có ngoại lệ)

Tại sao?

Trả lời

20

Bạn có thể giả mạo một ngữ cảnh biểu mẫu theo cách thủ công. Ví dụ, nếu bạn đã có một số điểm cục bộ mà không chứa một yếu tố <form> và được gọi là sử dụng AJAX để tái sinh một số yếu tố đầu vào bạn có thể làm điều này:

@model MyViewModel 
@{ 
    ViewContext.FormContext = new FormContext(); 
} 

@Html.LabelFor(x => x.Foo) 
@Html.EditorFor(x => x.Foo) 
@Html.ValidationMessageFor(x => x.Foo) 

Các yếu tố đầu vào tương ứng với doanh nghiệp sẽ sở hữu các data-* thuộc tính. Nhưng điều đó có thể không đủ. Nếu bạn chỉ làm mới (sử dụng AJAX), chỉ một phần của <form> nhưng không thực sự thay thế phần tử biểu mẫu trong lệnh gọi DOM $.validator.unobtrusive.parse sẽ không đủ. Bạn cần xóa mọi xác thực trước đó liên quan đến yếu tố này:

success: function(result) { 
    // we are replacing only a portion of the form 
    $('#somePartOfTheForm').html(result); 

    $('form').removeData('validator'); 
    $('form').removeData('unobtrusiveValidation'); 
    $.validator.unobtrusive.parse('form'); 
} 
+3

Câu trả lời này phải được chấp nhận! – Marko

+0

Dude ... sau nhiều giờ sử dụng tất cả các lần phản hồi xung quanh điều này làm việc như một sự quyến rũ. Cảm ơn! – Romias

+0

Thông tin cơ bản khác: http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html – Jowen

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