【问题标题】:JavaScript code calling codebehind function only one timeJavaScript 代码只调用一次代码隐藏函数
【发布时间】:2016-04-07 14:31:26
【问题描述】:

我有一个 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# asp.net code-behind


【解决方案1】:

正如@RonWilliams 所说,该代码在开始时执行,当aspx 正在渲染时,不再执行。

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

如果您想调用服务器端函数,请尝试使用 AJAXPage Methods

【讨论】:

    【解决方案2】:

    您不能像这样真正将客户端 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>
    

    【讨论】:

    • 感谢您的回答,我知道这是问题所在,但是如果无法使用,为什么甚至可以使用此类功能?除了您提到的现有代码之外,还有其他解决方法吗,非常感谢您的帮助!
    • 我刚刚编辑了我的回复,添加了一个关于如何通过 Web 方法调用服务器端代码的基本示例,希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多