2017-11-03 17 views
0

JavaScript 함수가 인 이 완료된 후 ASP.Net을 사용 중이며 서버 측 함수를 호출해야합니다.OnClientClick AJAX가 끝난 후에 Fire OnClick을 실행하십시오.

문제는 클라이언트 코드가 끝나기 전에 숨겨진 값이 비어 있기 전에 서버 코드를 실행하고 있다는 것입니다. AJAX 호출은 도메인간에 있으므로 async를 사용하면 false이 작동하지 않는 것 같습니다.

조금 더 설명하기 위해 아래 기본 코드를 추가했습니다.

HTML

<input id="hdnToken" type="hidden" name="hdntoken" value="" /> 
<asp:Button ID="btnSubmit" Text="Submit" OnClientClick="return getToken();" OnClick="btnSubmit_Click" runat="Server"></asp:Button> 

자바 스크립트

function getToken() { 
    $.ajax({ 
     async: false, // Ignored across domains 
     method: "POST", 
     contentType: "application/json; charset=utf-8", 
     dataType: "jsonp", 
     success: OnSuccess, 
     error: OnError 
    }); 

    function OnSuccess(response) { 
     $('#hdnToken').val(response); 
     return true; 
    } 

    function OnError(response) { 
     console.log(response); 
     return false; 
    } 
}; 

ASP.Net 서버 측 코드

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    var hidden = Request.Form["hdnToken"]; 
} 

답변

1

간단한 트릭없이 텍스트 만있는 페이지에하는 LinkButton을 배치하는 것 OnClick 이벤트.

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"></asp:LinkButton> 

그런 다음 당신은 simulateClick()가 실행될 때 지금, 그것은 뒤에 코드에서 LinkButton1_Click 방법을 트리거 줘야 UniqueID

<script type="text/javascript"> 
    function simulateClick() { 
     __doPostBack('<%= LinkButton1.UniqueID %>', ''); 
    } 
</script> 

와 링크에서 포스트 백을 시뮬레이션 할 수 있습니다. 더미의 LinkButton을 배치함으로써

당신이 마법처럼 enableEventValidation

+0

작품을 해제 할 필요가 없습니다, 감사 – fizgog