2012-04-03 6 views
0

asp.net 버튼이 UpdatePanel 안에 싸여 있으며 클릭하면 비동기 포스트 백이 실행되고 jquery 대화 상자를 보여주는 자바 스크립트가 등록됩니다. 당신은 자바 스크립트를 볼 수있는비동기 포스트 백에 자바 스크립트 등록하기

protected void btnAddData(object sender, EventArgs e) { 
    StringBuilder jqueryDialog = new StringBuilder(); 
    jqueryDialog.Append("$(document).ready(function() {"); 
    jqueryDialog.Append("RefreshData();"); 
    jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });"); 
    jqueryDialog.Append("});"); 

    ScriptManager sm = ScriptManager.GetCurrent(this); 
    if (sm != null && sm.IsInAsyncPostBack) { 
     ScriptManager.RegisterClientScriptBlock(
      this, typeof(Page), Guid.NewGuid().ToString(), 
      jqueryDialog.ToString(), true); 
    } 
} 

첫 번째 기능은 자바 스크립트로 내 마크 업에 존재 RefreshData라는() 함수를 호출합니다.

<script type="text/javascript" language="javascript"> 
    if ($) { 
     $(document).ready(function() { 
      function RefreshData() { 
       alert("Data Refreshed!"); 
      } 
     }); 
    } 
</script> 

그러나, 파이어 폭스는 RefreshData이을 정의되지 않은 없다는 오류를주고있다. 비동기 포스트 백에 등록한 모든 자바 스크립트가 내 마크 업에 정의한 JavaScript 함수를 사용할 수 없다는 뜻입니까?

도움 주셔서 감사합니다.

답변

2

익명 콜백 인 document.ready 함수 내에 RefreshData 함수를 정의하지 마십시오. 그것이 외부에 액세스 할 수 있도록 외부를 정의 : 또한

<script type="text/javascript"> 
    if (typeof($) != 'undefined') { 
     function RefreshData() { 
      alert("Data Refreshed!"); 
     } 
    } 
</script> 

당신은 아마 document.ready에 서버 측을 포장 할 필요가 없습니다은 다음과 같습니다

StringBuilder jqueryDialog = new StringBuilder(); 
jqueryDialog.Append("RefreshData();"); 
jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });"); 
+0

방법 대해서 typeof'에 대한 ($를)! = '정의되지 않음'? – ShankarSangoli

+1

@ShankarSangoli, 좋은 지적. jQuery 테스트에 대한 답을 업데이트했습니다. –

+0

@ 다린 - 감사합니다. 이것은 트릭을했다. – Jagd

관련 문제