17

Tôi có quan điểm sau đây trong ASP.net MVC 3:ASP.net MVC Validation Hook

@model Models.CreateProjectViewModel 

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

@using(Html.BeginForm()) { 
    @Html.TextBoxFor(m => m.ProjectName) 
    @Html.ValidationMessageFor(m => m.ProjectName) 

    <p> 
     <input type="submit" value="Save" /> 
    </p> 
} 

Tôi đang sử dụng javascript kín đáo với jQuery và khuôn khổ thạo Validation.

Khi tôi nhấp vào nút Lưu và xác thực không thành công, có sự kiện nào tôi có thể kết nối để gọi một số javascript tùy chỉnh không?

function validationFailed() { 
    // do something here only if validation failed 
} 

Làm cách nào để gắn kết xác thực để khi không thành công (và chỉ khi không thành công) tôi có thể gọi hàm validationFailed() của mình.

+0

Chính xác bạn đang cố gắng làm gì? Tôi biết bạn muốn chạy một số javascript nếu nó không thành công, nhưng những gì đang cố gắng để đạt được bằng cách làm điều đó? –

Trả lời

3

Bạn có thể sử dụng invalidHandler, tôi tin rằng đó là trong xác nhận jquery.

invalidHandler Gọi lại
Gọi lại mã tùy chỉnh khi gửi biểu mẫu không hợp lệ. Được gọi là với đối tượng sự kiện làm đối số đầu tiên và trình xác thực là giây.

+0

Nếu tôi đang sử dụng Chú thích dữ liệu hoặc Xác thực thông thạo, điều này có ảnh hưởng đến việc tôi tạo trình xử lý hợp lệ trong chế độ xem của tôi không? – Dismissile

+0

Đây sẽ chỉ là một cuộc gọi lại được kích hoạt khi biểu mẫu được gửi không hợp lệ. Tất cả xác thực bạn tạo thông qua chú thích dữ liệu, v.v. sẽ hoạt động như bình thường. –

+0

Điều này không hoạt động. Khi tôi thêm validate() vào biểu mẫu của tôi, nó sẽ bị bỏ qua. Tôi nghĩ có một xung đột giữa trình xử lý xác thực của tôi rằng các chú thích dữ liệu đang tạo và một chú thích mà tôi đang cố gắng thêm theo cách thủ công. – Dismissile

35

Như jQuery/Validation tài liệu nói, bạn có thể sử dụng invalidHandler để phản ứng khi một hình thức không hợp lệ được gửi đi.

Nhưng kể từ khi xác thực không phô trương MVC khởi tạo tính năng Xác thực, bạn phải móc sự kiện này sau.

Sử dụng chính xác cùng một cơ chế như jQuery/Validation: bạn có thể liên kết mã của mình với các yếu tố biểu mẫu tùy chỉnh sự kiện 'invalid-form.validate', phù thủy tương ứng với invalidHandler!

$(document).ready(function() { 
    $('#myform').bind('invalid-form.validate',function(){ 
     alert('invalid form!'); 
    }); 
}); 

để cung cấp cho mẫu của bạn một sử dụng id:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform" })) { 
} 

Cập nhật:

Một cách khác để có được những đối tượng xác nhận hiện đang kêu gọi validate() về hình thức. Nếu một validator cho hình thức này đã được tạo, nó sẽ được trả lại:

Chỉnh sửa: sau khi khởi xảy ra, thay đổi .settings.invalidHandler là quá muộn để ràng buộc. Vì vậy, đoạn mã sau sẽ không hoạt động [nữa] trừ khi bạn khởi tạo lại trình xác thực.

$(document).ready(function() { 
    var existingValdiation = $("#myform").validate(); 
    //the settings property corresponds to the options parameter 
    existingValdiation.settings.invalidHandler = function (form) { 
     alert('invalid form!'); 
    }; 
    // not recommended: 
    // re-init would bind settings.invalidHandler to 'invalid-form.validate' 
    // existingValdiation.init(); 
}); 
+0

Tùy chọn đầu tiên hoạt động tốt! :) –

+0

Cảm ơn bạn. Lựa chọn đầu tiên hoàn hảo cho tôi. = -) –

+0

Tùy chọn đầu tiên hoạt động. Thứ hai thì không. Nên chỉnh sửa thay thế hoặc xóa nó? Cảm ơn người đầu tiên. –

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