MVC在不可预测的时间从razor @Helper调用Javascript

时间:2015-01-30 11:38:10

标签: javascript c# asp.net-mvc razor

在我的MVC视图中,我需要使用razor c#代码在页面加载后的不可预测的时间执行javascript函数。

我使用了一个线程来模拟不可预测性,但最终它不是线程,它将是一个WCF回调方法,它引发一个运行帮助器的事件,但是为了消除我使用该线程的会话问题。

要执行的Javascript:

<script type="text/javascript">
    function DisplayNews(news) {
        alert(news);
    }
</script>

运行javascript的帮助程序(因为直接在下面的帖子中粘贴它并没有工作)

@helper UpdateNews(string news)
{          
    <script>
        DisplayNews(news);
    </script>   
}

模拟不可预测性/帖子后页面加载或非用户调用事件的线程

@{
    System.Threading.Thread T = new System.Threading.Thread(new System.Threading.ThreadStart(delegate
    {
        while (true)
        {
            System.Threading.Thread.Sleep(5000);
            UpdateNews("Some cool news");        
        }
    }));

    T.Start();
}

如果我在UpdateNews("Some cool news");处坚持一个断点,我可以看到它每隔5秒就会被击中,但就其而言,只要它得到,就没有其他事情发生。我无法在帮助者或Javascript中找到一个断点,因此我无法在此之后看到它停止工作的位置。

这是否会起作用或是否有其他方式我应该接近这个?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

在服务器端代码中,您可以调用客户端函数...

Razor在服务器端执行,javascript在客户端。这意味着当你得到服务器响应时它是由服务器端的剃刀代码创建的,现在你可以在客户端使用javascript

答案 1 :(得分:0)

我可能误解了你要做的事情但是你可以使用javascript来运行页面加载,它将被包含在一个随机毫秒周期的设置超时中。

这样的事情:

<script>
  window.onload = function() {
     setTimeout(function() {}, 1000); // this will run 1 second after page load
  }
</script>

只需将作为第二个参数传递的数字随机化为setTimeout,您的javascript将在页面加载后的随机时间运行。