【问题标题】:Access Static Property Values From Code Behind Jquery/Javascript从 Jquery/Javascript 后面的代码访问静态属性值
【发布时间】:2018-09-04 12:29:44
【问题描述】:

我必须将最大值和百分比值读入 jquery 函数。我尝试在页面加载时将这些值读入隐藏变量和会话变量,它总是返回 0。 这些是我的属性:

    public static int Max { get; set; }
    public static int Percent { get; set; }

这是我的代码隐藏:

      [WebMethod]
      public static string Test()
      { 
          var y = 0;
          var max = 100000;
          Max = max;
          for(int i = 0; i < max; i++)
          {
              y++;
              Percent = y++; 
          }
          if (y > max)
              return "Success";
          else
            return "Fail";
      }

这是我点击按钮时的 ajax 调用。我正在尝试使用另一个函数读取每个 i 的最大值和百分比值。我不确定如何将这些值调用到另一个函数中。

<asp:Button ID="btnGetData" runat="server" Text="Get Data" />

   $(document).ready(function () {
     $$('btnGetData').click(function () {
         function readValues();
         $.ajax({
             type: 'POST',
             url: 'Test.aspx/Test',
             data: "{}",
             contentType: "application/json; charset=utf-8",
             dataType: "json",
             async: true,
             success: function (Result) {
                 alert(Result.d);
             },
             error: function (Result) {
                 alert('Error!');
             }

         });
     });
 });
function readValues(){
 var t = <%= Max%>;
 var p = <%= Percent%>;  //This has to be updated every few seconds until 
                             //the for loop is finished.
}

【问题讨论】:

  • 您的最大和百分比将在页面加载和显示时得到评估。它们不会以您想要的方式动态更新 - 这就是它们为零的原因,因为这是它们的初始值。一种方法是将服务器端的处理移动到一个单独的线程/进程中,并有一个单独的 Ajax 调用来报告前端然后重复调用的进度。
  • /This has to be updated every few seconds until //the for loop is finished. 这是不可能的。 C#代码运行在服务器上,JS代码运行在浏览器上。在您的 AJAX“成功”回调中,一旦 C# 代码完全处理完您告诉它的所有内容,您将获得一个结果。这段代码看起来像是一些虚拟/演示代码。这里真正的用例是什么?也许还有另一种方法可以实现您的实际目标。

标签: javascript c# jquery asp.net ajax


【解决方案1】:

我猜你想要达到的目标类似于这个问题: Simple BackgroundWorker is not updating label on web page

基本上,您的选择是:

  • 重新构建您的服务器端代码,以便操作开始第一次调用(并立即返回),然后前端可以调用不同的函数/端点来查看当前进度并报告(可能通过每秒使用一次计时器或其他方式)
  • 使用某些东西来启用双向通信(例如 SignalR),以便服务器可以将其进度报告回客户端。

对于 StackOverflow 上的直接答案,其中任何一个都可能有点过于复杂。我建议尝试围绕这些建议整理一些东西,然后在遇到问题时再回来。

【讨论】:

    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多