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