JavaScript代码只调用一次codebehind函数

时间:2016-04-07 14:31:27

标签: javascript c# asp.net code-behind

我有一个JavaScript函数,它不会多次在代码隐藏中调用函数。我调试了它,我可以确认它不是多次调用。这是我遗失的东西吗?

JavaScript代码:

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

        }

代码隐藏功能:

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

正如@RonWilliams所说,当aspx呈现时,该代码仅在 处执行,而不再是

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

如果您想调用服务器端功能,请尝试AJAXPage Methods