繁体   English   中英

JavaScript代码仅调用一次代码隐藏函数

[英]JavaScript code calling codebehind function only one time

我有一个JavaScript函数,该函数不会多次在代码隐藏中调用函数。 我已经调试了它,可以确认它调用的次数不止一次。 是我想念的东西吗?

JavaScript代码:

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

        }

代码隐藏功能:

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

您不能真正像这样将客户端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>

就像@RonWilliams所说的那样,该代码在渲染aspx时才开始执行,而不再执行。

以您编写的形式执行代码的唯一方法是,例如在asp:Repeater内部或GridViewasp:TemplateField内部。

如果要调用服务器端函数,请尝试使用AJAXPage Methods

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM