2011-10-17 31 views
9

Tôi đã có một lĩnh vực tiềm ẩn với một xác nhận cho nó như sauKhách hàng xác nhận bên không làm việc cho lĩnh vực ẩn trong asp.net MVC 3

@Html.HiddenFor(m => m.Rating) 
@Html.ValidationMessageFor(m => m.Rating) 

Thuộc tính Rating đã Range validator thuộc tính áp dụng với phạm vi là 1- 5. Điều này được đặt bên trong một biểu mẫu với một nút gửi.

Tôi đã sau đó đã sau jquery mà bộ giá trị trong lĩnh vực ẩn trên một số sự kiện sử dụng (Về cơ bản người dùng nhấp vào một số ngôi sao để đánh giá)

$(".star").click(function(){ 
    $("#Rating").val(2); 
}); 

Bây giờ nếu tôi gửi biểu mẫu mà không có sự kiện người dùng đặt trường ẩn, xác thực hoạt động. Các thông báo lỗi được hiển thị đúng và nó hoạt động tất cả các phía khách hàng.

Hiện tại, trong trường hợp này, nếu tôi nhấp vào các ngôi sao, điều này sẽ gọi javascript ở trên là bộ trường ẩn, thông báo lỗi xác thực sẽ không biến mất. Tôi có thể gửi biểu mẫu sau khi biến ẩn có một số giá trị hợp lệ. Nhưng tôi hy vọng rằng xác nhận phía khách hàng sẽ hoạt động. (Khi biến ẩn đã được thiết lập với một số giá trị hợp lệ, lỗi xác thực sẽ biến mất)

Ban đầu tôi nghĩ rằng xác nhận jquery sẽ được gọi trên một số sự kiện đặc biệt vì vậy tôi đã thử tăng nhấp chuột, thay đổi, khóa, làm mờ và các sự kiện tập trung vào bản thân mình như bên dưới

$(".star").click(function(){ 
    $("#Rating").val(2); 
    $("#Rating").change(); 
}); 

Nhưng điều này vẫn không hoạt động. Các thông báo lỗi một lần xuất hiện, không biến mất chút nào.

Trả lời

2

Trong đoạn code đó đặt giá trị lĩnh vực tiềm ẩn của, tự gọi xác nhận đối với hình thức, như vậy:

$("form").validate().form(); 
+0

Tôi không nghĩ rằng bạn cần dạng() gọi vào cuối tuyên bố trên. –

+0

'form()' là cần thiết để có các thông báo lỗi trên biểu mẫu được cập nhật. Vì câu hỏi là về việc cập nhật ngay lập tức các thông báo lỗi, nó là cần thiết. – counsellorben

+0

@counsellorben Điều đó đã làm việc như một sự quyến rũ – Suhas

1

Tôi nghĩ đó là do đầu vào bị ẩn không kích hoạt bất kỳ sự kiện nào trong số này.

Thay vào đó, bạn có thể sử dụng <input type="text" style="display:none" /> thay vì trường ẩn;

@html.TextBoxFor(m => m.Rating, new {display = "display:none"}) 
+0

Điều đó không có tác dụng. Đoán tốt nhất của tôi là sau khi tôi đặt biến ẩn, tôi cần tăng một số sự kiện javascript như thay đổi/làm mờ mà xác thực lại. Tôi không chắc chắn rằng sự kiện đó là mặc dù – Suhas

+0

Có, đối với hộp văn bản ẩn, bạn sẽ kích hoạt sự kiện .change(). Tôi nghĩ rằng đối với đầu vào bị ẩn, không có sự kiện thay đổi mặc định nào được đính kèm. –

+0

Thật không may là không hoạt động. Tôi kích hoạt sự kiện thay đổi một cách rõ ràng sau khi đặt giá trị hộp văn bản ẩn. Nhưng xác thực lỗi không biến mất – Suhas

5

Bạn có thể quấn lĩnh vực ẩn của bạn với một div đặt ở đâu đó nhưng vẫn bên trong <form> . Thêm css để kick nó vào không gian bên ngoài.

<div style="position:absolute; top:-9999px; left:-9999px"> 
<input id="Rating" type="hidden" name="rating" > 
</div> 

Sau đó, thêm nhãn sau đến nơi mà bạn muốn hiển thị lỗi:

<label for="rating" class="error" style="display:none">I am an an error message, please modify me.</label> 
+0

Tôi không làm việc nhiều hơn về dự án này nên không có cách nào tôi có thể thử điều này. nhưng tôi thích gợi ý này, vì vậy hãy nhớ lên :) – Suhas

+0

Ý tưởng tuyệt vời, đã lưu thịt xông khói của tôi hôm nay ... –

+0

Đây là "giải pháp". Cảm ơn. – Remotec

5

Client-side validation bỏ qua lĩnh vực ẩn. Bạn có thể thiết lập tùy chọn "bỏ qua" tự động nhưng chỉ để làm cho nó hoạt động, tôi đã thực hiện directl sau trong tệp .js.

Hiện tại, bạn nên thực hiện thủ thuật.

Trong aspx của tôi ...

<%: Html.HiddenFor(model => model.age, new { @class="formValidator" }) %> 

Trong jquery.validate.js

ignore: ":hidden:not('.formValidator')", 
5

Điều này hóa ra lại là một vấn đề rất thú vị. cài đặt "bỏ qua" mặc định bỏ qua các trường bị ẩn. Trường này đã bị ẩn trong một trình cắm thêm jQuery ui.Tôi chỉ cần thêm một lớp được gọi là "includeCheckBox" vào đầu vào được hiển thị mà tôi muốn xác thực và đặt dòng mã sau đây vào ...

var validator = $('#formMyPita').validate(); 
validator.settings.ignore = ':hidden:not(".includeCheckBox")'; 
if ($('#formMyPita').valid()) {.... 
Các vấn đề liên quan