我有一个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)
您无法像这样将客户端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
内。
如果您想调用服务器端功能,请尝试AJAX或Page Methods