2016-04-07 8 views
0

JavaScriptビヘイビアでコードビハインドの関数を2回以上呼び出さないJavaScript関数があります。私はそれをデバッグし、私はそれが複数回呼び出されていないことを確認することができます。それは私が紛失しているものですか?JavaScriptコードコードビハインド関数を1回だけ呼び出す

JavaScriptコード:

function loader() { 
      for(var i=0;i<<%=array1.Length%>;i++) 
      {<%increment();%>; 
      alert(<%=counter%>); 
      } 

     } 

分離コード機能:

public int counter = -1; 
     public void increment() 
     { counter++; } 
+0

あなたの実際の質問は何であるとしてみてください? –

答えて

1

@RonWilliamsが言うように、そのコードだけがaspxはもう、レンダリング、およびされていない初め、で実行です。

コードが書かれた形で実行される唯一の方法は、たとえば、asp:Repeaterの内部か、またはGridViewasp:TemplateFieldの内部です。

あなたは、サーバー側の関数を呼び出したい場合は、AJAXまたはPage Methods

1

あなたが本当にあなたのクライアント側のJavaScriptコードと、このようなサーバー側C#コードを絡み合うことはできません。基本的には、ページ上でレンダリングが完了したら、PostBackが発生するか、またはAJAXを使用して露出したWebMethodを呼び出すまで、実際にサーバーにアクセスすることはありません。

ページが最初にレンダリングされるときに一度呼び出されます。そうでなければ、他のテクニックの1つを使用する必要があります。

WebMethodアプローチ

私は次のようになりますあなたのコードビハインドでメソッドを作成するあなたを伴うだろうWebMethod、を活用して、先に述べたようにあなたはこれを実現できます。

[WebMethod] 
public static void IncrementCounter() 
{ 
    // Since you want to return the incremented value, use ++counter 
    return ++counter; 
} 

そして、ASPXページの参照をjQueryライブラリに追加する必要があります。これは、このサーバー側メソッドにアクセスするためのAJAX呼び出しの実行を処理するために使用されます:

<script src="https://code.jquery.com/jquery-2.1.4.js"></script> 
<script> 
    // This will ensure that your jQuery code is ready to run 
    $(function(){ 
      // When the page is ready, call your loading function 
      loader(); 
    }); 

    function loader() { 
     for(var i=0; i< <%=array1.Length%>; i++){ 
      // This will call your WebMethod 
      $.post('YourPage.aspx/IncrementCounter', function(count){ 
        // count will contain the counter value 
        alert(count); 
      }); 
     } 
    } 
</script> 
+0

答えがありがとう、私はこれが問題だと理解していますが、なぜそのような機能を使用することができない場合でも利用可能ですか?あなたは私が持っている既存のコードで言及したもの以外の回避策はありますか?本当に感謝しています! – codemania23

+0

Webメソッドを使用してサーバー側のコードを呼び出す方法の基本的な例を含めるように、私は自分の応答を編集しました。 –

関連する問題