【问题标题】:ASP.NET Form app not rendering continuouslyASP.NET Form 应用程序不连续呈现
【发布时间】:2016-02-04 16:19:02
【问题描述】:

我正在用 C# 编写一个简单的 winforms 应用程序,该应用程序连接到每 1 秒更新一次 JSON 的 ashx 文件。我的应用需要调用此文件,收集数据并将其显示在我的 aspx 页面上。

要求是我有一个按钮来启动这个过程。当按下按钮时,数据的一个实例会按原样显示。问题是当我尝试多次这样做时。

  protected void eThorButton_Click(object sender, EventArgs e)
    {
        //for (int i = 0; i < 5; i++)
        //{
            RenderData(eThorButton.Text);
            Thread.Sleep(1000);
        //}

    }

    private void RenderData(string buttonText)
    {
       EquationData deserializedData = getData("http://test.com/test.ashx");

            var processed = new ProcessEquation();
            int result = processed.Calculate(deserializedData);

            string res = deserializedData.parm1 + "  " + deserializedData.op + "  " + deserializedData.parm2 +
                " = " + result;
            TextBoxResult.Text = res;

            equation.Append("  " + deserializedData.parm1 + "  " + deserializedData.op + "  " + deserializedData.parm2 +
                " = " + result + '\n');
            TextAreaResults.Value = equation.ToString();
    }

我想要的是在循环数据时呈现每条记录,在继续之前暂停一秒钟。实际发生的是循环首先完成,然后同时呈现所有 5 条记录。

如何修改我的代码以显示每条记录,间隔一秒?

谢谢


我创建了一个支持 ajax 的 WCF 服务:

namespace CandidateTest.Service

{ [ServiceContract(Namespace = "CandidateTest.Service")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 公共类 eThorService { 公共字符串按钮; [WebGet()] [运营合同] 公共无效 getUpdate() { _Default def = new _Default();

        def.RenderData(button);
    }
}

}

以及调用“getUpdate”的脚本

$(function () {

while ($('#eThorButton').text != "Stop") {

    $.ajax({

        url: 'Service/eThorService.svc/getUpdate',
        method: 'GET',
        dataType: 'json',
        success: function(){
            alert("success");
        },
        error: function (err) {
            alert(err);
        }

    })
    delay(1000);
}

});

这是基于在线研究。这是我第一次尝试这样做,所以我真的不知道自己在做什么。当我输入 URL 时,该服务从浏览器运行,但似乎没有从我的脚本中调用。我做错了什么?

【问题讨论】:

  • 当你把它放在浏览器中时,你是在放完整的 url,对吧?尝试将完整的网址放在 url: 部分。

标签: c# asp.net multithreading wcf


【解决方案1】:

您忘记了页面生命周期是如何工作的。您的 eThorButton_Click 事件处理程序在任何 HTML 发送回浏览器以进行呈现之前完成。

如果您想实时查看页面上的数据更改,您需要在客户端上使用 javascript 向服务器发出请求以获取那一秒的更新。我会创建一个新的 Web 服务来调用您的 RenderData 函数并返回 equation.ToString() 结果。然后让 javascript 调用这个 web 服务。当它得到结果时,将其附加到&lt;div/&gt; 以显示它。

【讨论】:

  • 我整个上午都在修改我的代码,但没有太多成功。我添加了一个启用 ajax 的 WCF 服务和一个 jquery 脚本来调用我的 RenderData 方法。该服务通过在我的浏览器中输入 url 来工作,但似乎我的脚本不是。让我在这里添加代码......
猜你喜欢
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多