2011-11-17 28 views
5

Tôi đã nhìn thấy rất nhiều câu hỏi về điều này, nhưng tôi đã bị bối rối! Hãy giúp tôi!Công cụ xác thực tùy chỉnh kích hoạt nhưng không ngăn cản việc đăng lại

Tôi có một customvalidator. Nó bắn nhưng nó không ngăn cản việc postback. Xin hãy giúp tôi làm như vậy! Tôi có thể thấy console.log đó đăng ký trước bài đăng. Tuy nhiên, nó vẫn đăng lại. Làm thế nào để ngăn chặn postback?

Tôi đã thử thêm một điều khiển để xác thực và xác thực văn bản trống bằng true. Tôi cũng đã cố gắng thêm e.preventdefault, mà không làm việc :(

Làm thế nào tôi có thể ngăn chặn các postback?

<script type="text/javascript"> 
//<![CDATA[ 
function validateWhyUnlikely(source, args) { 
    console.log(1); 
    args.isValid = false; 
} 
//]]> 

<asp:TextBox ID="txtWhyUnlikely" runat="server" Rows="4" cols="20" 
      CssClass="surveyTextArea" /> 
<asp:CustomValidator runat="server" ID="cfvWhyUnlikley" ErrorMessage="Please provide a reason since you rated an item as unlikely to provide." 
     CssClass="surveyError surveySmallIndent" Display="Dynamic" 
     ClientValidationFunction="validateWhyUnlikely" /> 
<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="smallSpecial" OnClick="btnSubmit_Click" /> 


jQuery(document).ready(function() { 
    jQuery('#<%= btnSubmit.ClientID %>').click(function (e) { 
     if (Page.IsValid == false) { 
      console.log(false); 
      e.preventDefault(); 
      return false; 
     } 
    }); 
}); 

Trả lời

4

Mọi thứ trông mặc dù điều ok Tôi không chắc chắn lý do tại sao bạn là gắn chức năng Click vào nút gửi của bạn. Tôi sẽ xóa chức năng đó và kiểm tra nó vì nó có thể ghi đè hành vi mặc định. hoa IsValid tài sản:

args.IsValid = false; 
+0

Cảm ơn ... Tôi muốn biên dịch JavaScript! Không có lỗi, không thấy lỗi vỏ này @Kelsey – Hoppe

3

tôi cũng phải đối mặt với vấn đề này, tôi đã cố gắng để thêm một validator tùy chỉnh đến một DropDownList mà đã có một sự kiện selectedIndexChange gắn liền với nó. Sau khi tôi đưa ra giá trị không chính xác cho trình đơn thả xuống, tôi đã có thể nhận được thông báo lỗi tôi đã cung cấp trong Trình xác thực tùy chỉnh nhưng ngay sau khi Postback xảy ra.

Tuy nhiên khi thêm thuộc tính này CausesValidation="true" vào điều khiển danh sách thả xuống đã giải quyết được sự cố của tôi.

Việc đăng lại không xảy ra với giá trị không chính xác sau khi thêm thuộc tính này vào danh sách thả xuống của tôi.

+1

Hãy đánh dấu nó là câu trả lời nếu nó giúp bạn. – Shalini

1

Tôi cũng gặp sự cố này.

Những gì tôi đã làm được, trong quá trình C# được gọi bằng nút, ở phía trên tôi đã thêm

if (IsValid == false) 
     return; 

tôi không thể ngăn chặn nó thực hiện postback vì vậy đây có vẻ với tôi như giải pháp duy nhất.

0

Đăng bài này vì nó có thể giúp một người nào đó nhận được cùng một hành vi kỳ lạ.

Ban đầu tôi gặp vấn đề tương tự với tiêu đề bài đăng này. Tôi đã kiểm tra tất cả các gợi ý ở đây nhưng mã của tôi dường như vẫn ổn.

Để khắc phục điều này, tôi đã thay thế điều khiển xác thực nguyên nhân <asp:Button.. bằng <button... Không chắc chắn tại sao điều này xảy ra nhưng hạnh phúc bây giờ nó đang hoạt động.

hth

1

Bạn đang misssing ControlToValidate="txtWhyUnlikely"

0

< thẻ nút đang thiếu đúng mã javascript để xác nhận. < asp: Nút không hiển thị đúng javascript.

Tôi đã thêm này cho bất kỳ thẻ nút:

btn.Attributes("onclick") = StringFmt("if(!Page_ClientValidate(''))return false;") 

và giải quyết các vấn đề sau lưng. Không có hậu tố xảy ra nếu phía máy khách phát hiện một vấn đề.

1

Nếu nó giúp người khác, tôi đã có nhóm Xác thực mà tôi quên thêm nút vào.

Đảm bảo thêm nút, hộp văn bản và trình xác nhận hợp lệ vào cùng một nhóm xác thực để đăng lại bị ngăn chặn.

0

tôi giải quyết vấn đề này bằng cách tạo ra một biến:

Boolean fieldIsValid = true; 

đồng xác nhận biểu hiện tùy chỉnh tôi sẽ thay đổi giá trị nếu đối số là không đúng sự thật:

if(args.IsValid == false) 
      { 
       fieldIsValid = false; 
      } 
      else 
      { 
       fieldIsValid = true; 
      } 

Sau đó, tôi cũng đặt trong phương thức gửi nhấp:

protected void submit_Click(object sender, EventArgs e) 
     { 
      if (fieldIsValid) 
      { 
       //submit my things 
      } 
     } 
Các vấn đề liên quan