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
我有一个 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