2010-08-06 30 views
7

Tôi cảm thấy như tôi đã thực hiện kịch bản này nhiều lần, và nó thường hoạt động, vì vậy im rõ ràng là thiếu một cái gì đó.ASP.NET/JavaScript - Tại sao không phải là "Return False" Không ngăn cản việc đăng lại?

Dưới đây là server-side của tôi ASP.NET Button:

<asp:Button ID="btnFoo" runat="server" Text="Foo" CssClass="button foo" OnClientClick="foo_Click();" /> 

nào nhận của render trên máy khách như:

<input type="submit" name="reallylongclientid" value="Foo" onclick="foo_Click();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(reallylongclientidandpostbackoptions, false, false))" id="reallylongclientid" class="button foo"> 

Không có bất ngờ ở đó.

Đây là bất ngờ, trong hàm JavaScript của tôi:

function foo_Click() { 
    return false; 
} 

Được rồi vì vậy có nhiều điều hơn thế, nhưng tôi cắt nó xuống để chứng minh một điểm.

Khi tôi nhấp vào nút, nó gọi hàm phía máy khách và trả về false.

Nhưng nó vẫn đăng lại máy chủ, tại sao?

tôi về cơ bản muốn làm điều này trên các bấm vào nút:

  1. Đỗ xác nhận client-side.
  2. Nếu xác thực qua, hãy đăng lại
  3. Nếu không, hãy hiển thị một số thông báo lỗi trên biểu mẫu.

Tất nhiên, tôi có thể thay đổi điều này với một nút client-side (input type = "button") và tay đá ra khỏi postback khi tôi muốn, nhưng tôi không cần phải làm điều đó. Hay tôi?

Trả lời

17

ghi return tuyên bố như vậy khi bạn bấm vào nút nó return false mà không cho phép để nộp mẫu

<asp:Button ID="btnFoo" runat="server" Text="Foo" CssClass="button foo" 
OnClientClick="return foo_Click();" /> 
+0

biết đó là rõ ràng (tát đầu). Cảm ơn. – RPM1984

+0

Tôi chỉ nhận thấy rằng nếu tôi làm "var passValidation = new Boolean (false); return passValidation" nó vẫn đăng lại. Nhưng nếu tôi chỉ trở lại sai, nó không. WTF? bất kỳ ý tưởng? – RPM1984

+0

@ RPM1984: Sử dụng hàm tạo 'Boolean', với từ khoá' new', tạo ra một trình bao đối tượng 'Boolean' *, và trong JavaScript bất kỳ đối tượng nào được coi là * truthy * khi được sử dụng trong ngữ cảnh boolean, ví dụ:' !! Boolean mới (false) '==>' true', tôi sẽ khuyên bạn chỉ nên sử dụng các boolean 'true' hoặc' false' literals, đại diện cho các giá trị nguyên thủy trực tiếp ... – CMS

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