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

如果您想调用服务器端函数,请尝试使用 AJAX or with