2016-04-07 109 views
0

我有一個JavaScript函數,它不是在代碼隱藏中多次調用一個函數。我已經調試過它,我可以確認它不是多次調用。這是我失蹤的東西嗎?JavaScript代碼只調用一次代碼隱藏功能

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之內或在GridView之內的asp:TemplateField之內。

如果你想調用服務器端功能,嘗試用AJAXPage Methods

1

你真的不能相互交織您的客戶端JavaScript代碼和你這樣的服務器端的C#代碼。基本上,一旦在你的頁面上完成了渲染,你就不會訪問服務器,直到發生PostBack或者你使用AJAX調用一個暴露的WebMethod

頁面最初呈現時會調用它,否則,您需要使用其他技術之一。

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方法處理調用服務器端代碼的方法,該方法可以幫助您解決問題。 –