ASP.net从服务器到客户端传递变量

时间:2015-03-12 13:29:15

标签: asp.net

我正在使用此代码在服务器端使用系统计时器

System.Timers.Timer tm = new System.Timers.Timer();

在我使用间隔事件后,当计时器以指定的间隔启动时,事件被触发,我执行的代码如下

protected void ev_interval(some arguments)
{
   label.text = (x++).ToString();
}

因此,为了简化,我有一个全局变量x,它递增并传递给客户端aspx文件中的标签。

当不使用定时器时,传递变量,但是当定时器被触发时,我在标签文本中看不到任何值。

我是否需要刷新或其他东西,因为它会加载不同的数字或我是否需要进入相同的范围?

请注意,当我使用断点时,会执行间隔事件中的行,当我尝试观察变量时,一切正常,问题是它没有显示在页面上。

此致

N.B。我是asp.net上的菜鸟

2 个答案:

答案 0 :(得分:1)

当服务器将响应发送给客户端时,就是这样。服务器和客户端之间不再进行进一步的通信。因此,在服务器后面的代码中运行计时器并不是一个好主意,在计时器的间隔功能被击中时,您将无法与任何客户通话。

为了在初始请求后更新客户端,您有几个选择。

第一个选项是使用AJAX和JavaScript计时器实现轮询。每隔几秒钟,网页就会向服务器发出一个新的异步请求,该请求将响应其他内容。通常,ASP.NET中的服务器端组件为Web API。通常客户端使用JavaScript库来抽象出一些更麻烦的AJAX细节,而jQuery是最受欢迎的。 This question显示了如何实施投票。

更现代的技术是在服务器上以指定的时间间隔运行一些background process。我偏爱Hangfire,因为它有一个很酷的界面。此后台逻辑将运行其任务,然后理想地在所有连接的客户端RPC style上调用一些代码。在ASP.NET中实现该功能的一个很棒的库是SignalR。基本上,客户端打开与服务器的连接,然后服务器可以随意调用客户端上的JavaScript函数。对于实时"它来说非常棒。你希望更新的东西比实施轮询更快,并且它可以更好地扩展。

答案 1 :(得分:0)

如果要定期执行服务器端功能并按照定时间隔执行,那么您很可能需要客户端进程。然而,从您的问题来看,它看起来根本不需要服务器端的任何内容。如果这只是一个根据计时器递增的值,为什么不只是创建一个javascript函数来执行此操作?

另一方面,如果你有一个变量以某种方式改变服务器端而你需要将它传递给客户端,你会做类似于下面代码的事情,除非你在定时器中放置一个API调用处理程序而不是递增值。处理程序将调用API(它基本上只是服务器端的一个函数,可以由客户端调用而无需回发),API将执行该函数并返回一个值,并且javascript将插入值进入网页上的元素。当然,如果您是新手,创建API时可能会涉及一些复杂的步骤,但这就是您要做的。

我将在此答案的底部添加一些链接,以帮助您开始构建API,如果这是您想要做的。


的Javascript

$(document).ready(function () {
    var myAspTextbox = $('#myAspTextbox'); // variable for our ASP Textbox control.
    var inc = parseInt(myAspTextbox.val() || 0); // variable for ou incrementing value. This will pull either (1) the value already in the textbox if one is there when the page is loaded, or (2) will set the value to zero.
    var timeInterval = 2000 // set interval timer for two seconds
    var incrementalInterval = setInterval(function () {
        inc++;
        myAspTextbox.val(inc);
    }, 1500);

});

HTML

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>DEMO</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript" src="freestyle.js"></script>

</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:TextBox ClientIDMode="Static" ID="myAspTextbox" runat="server" placeholder="Incremental Interval"></asp:TextBox>

    </div>
    </form>
</body>
</html>

如果您想创建API控制器......

无论您使用的是webforms还是MVC,API控制器都是部分页面呈现和动态内容的绝佳工具,我总是鼓励新手开发人员考虑使用它们。有关创建API控制器的说明有点大,可以直接在这里发布,但这里有一些很棒的链接可以帮助你入门: