2010-03-11 2 views
5

사용자 정의 jQuery 유효성 검사가 false를 반환하는 경우 양식 제출시 포스트 백을 중지하려고합니다.UpdatePanel 내의 jQuery submit()에서 ASP.net __doPostback()을 방지합니다.

submit() 함수에서 __doPostback() 함수 완료를 방지 할 수있는 방법이 있습니까?

$('#aspnetForm').submit(function() { return false; }); 

트릭을 할 것입니다,하지만 분명히 그 사건은 아니다 :

은 내가 가정했던 사람이 제안이 있습니까?

submit() 함수는 포스트 백을 차단하지만 (firebug의 중단 점에서 일시 중지하면 다시 게시되지 않음) submit() 함수가 완료된 후에 이벤트를 중지 할 수 없습니다!

건배, 에드

편집

OK, 나는 약 빠른 혼란을했고 나는 다시 게시 원인이 사용하고 단추가 updatepanel에 연결되어 있다는 사실이 asyncpostbacktrigger가 보인다는 것을 발견 문제가 될 수 있습니다. 트리거로 제거하면 (즉, 전체 포스트 백이 생기기 때문에) 포스트 백이 false로 반환되는 것을 방지 할 수 있습니다.

비동기 포스트 백이 false를 반환하는 것을 멈출 수없는 이유는 무엇입니까?

답변

5

클라이언트 측 PageRequestManager을 사용하여 AJAX 제출 이벤트를 올바르게 처리해야합니다. (예 : 비동기 포스트 백이 발생하지 않도록하십시오.)

페이지를 완전히 제어하지 못하는 경우 페이지 로직을 거치지 않고 __doPostBack()을 호출하는 JavaScript가 페이지에있을 수 있습니다. 위의 경우 외에 -이 외에도 이전 window.__doPostBack()을 저장하고 자신의 의견을 언급해야합니다. @tucaz는 자신의 의견에서 언급했습니다. (... 언급했듯이 연결이 복잡해질 수 있습니다.) 정규 제출 (비 AJAX)의 경우 다른 사람이 지적한대로 이벤트 처리기를 제공 할 수 있습니다.

This page은 도움이 될 수 있으며 PageRequestManager을 사용하는 코드 샘플이 있습니다. 특히 :

initialize : function() 
{ 
    ... 

    this._onSubmitHandler = Function.createDelegate(this, this._onSubmit); 
    this._onPartialUpdateEnd = Function.createDelegate(this, this._onUpdateEnd); 

    if (typeof(Sys.WebForms)!== "undefined" && typeof(Sys.WebForms.PageRequestManager)!== "undefined") 
    { 
     Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onSubmitHandler); 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._onPartialUpdateEnd); 
    } 
    else 
     $addHandler(document.forms[0], "submit", this._onSubmitHandler); 
}, 

편집 : 위 이어,이 (예를 들어, 닷넷 3.5 SP1은 Button1이 ... 등의 updatepanel에서 트리거입니다) 나를 위해 잘 작동 :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.js" charset="utf-8" 
     type="text/javascript"></script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <div> 
       <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
      </div> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Button1" /> 
     </Triggers> 
    </asp:UpdatePanel> 
    </form> 
    <script type="text/javascript"> 
     (function($, undefined) { 

      var submitHandler = function(e) { 
       return false; 
      } 

      if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") { 
       Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, submitHandler); 
      } else { 
       $("form").submit(submitHandler); 
      } 
     })(jQuery); 
    </script> 
</body> 
</html> 
+0

예, UpdatePanel 문서를 검토했는데 취소 할 수있는 것 같습니다. PageRequestManager.getInstance(). abortPostBack()을 사용한 비동기 포스트 백입니다. 그러나,이 제대로 작동하지 않는 것 : 내 submit() 처리기가 더 이상 포스트 백을 차단하지 않습니다. –

+0

@ 우드 콕 (Woodcock) : 발견 된 출처와 기사를보고 http://msdn.microsoft.com/en-us/magazine/cc163380.aspx에서 abortPostBack()은 * 이미 시작된 요청을 취소하기위한 것입니다. –

3
$('#yourPostButton').click(function(){ 
    return false; 
}); 

이 작업을 수행해야합니다.

+0

@tucaz, 답변을 편집 하시길 바랍니다. – rahul

+1

예, 그렇지만 폼에있는 모든 버튼에 첨부해야합니다. 이는별로 의미가 없습니다. 나는 submit() (또는 이와 동등한 것)으로 할 수 있어야하므로 by-the-page 기반으로 코드를 구성하지 않고 코드를 사용하는 컨트롤을 사용할 수있다. –

+0

문제가 아닌 경우 $ ('input [type = button]') 또는 이와 유사한 모든 버튼에 추가하거나 .preventDefault()를 jQuery 설명서 (http : // api)에서 제안한대로 사용해보십시오. jquery.com/submit/ – tucaz

관련 문제