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

MVC在不可预知的时间从razor@Helper调用Javascript,javascript,c#,asp.net-mvc,razor,Javascript,C#,Asp.net Mvc,Razor,在我的MVC视图中,我需要获得razor c#代码,以便在页面加载之后的不可预测的时间执行javascript函数 我使用了一个线程来模拟不可预测性,但最终不是使用线程,而是使用一个WCF回调方法来引发一个运行helper的事件,但为了消除会话问题,我使用了该线程 要执行的Javascript: <script type="text/javascript"> function DisplayNews(news) { alert(news); } <

在我的MVC视图中,我需要获得razor c#代码,以便在页面加载之后的不可预测的时间执行javascript函数

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

要执行的Javascript:

<script type="text/javascript">
    function DisplayNews(news) {
        alert(news);
    }
</script>
如果我在
UpdateNews(“一些很酷的消息”)上贴一个断点我可以看到它应该每5秒被击中一次,但这就是它所能做到的,没有其他事情发生。我不能在helper或Javascript中插入断点,因此我看不出在那之后它在哪里停止工作

这会起作用吗?还是我应该用另一种方法来解决这个问题


非常感谢您的帮助。

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


Razor在服务器端执行,javascript在客户端运行。这意味着当您得到服务器响应时,它是由服务器端的Razor代码创建的,现在您可以在客户端使用javascript了,我可能误解了您的意图,但您可以使用javascript在页面加载时运行,页面加载将在设置的超时时间内完成具有随机毫秒周期

大概是这样的:

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

window.onload=函数(){
setTimeout(function(){},1000);//这将在页面加载后运行1秒
}

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

在我看来,您的做法是错误的。在我看来,你应该研究一下web套接字之类的东西。桑德曼说的。我认为您混淆了客户机和服务器及其功能。前端需要一个循环来轮询服务器,返回数据并更新显示。一旦web服务器提供了页面,razor代码就已经运行了。添加线程睡眠唯一能做的就是延迟页面的服务。您将需要使用Ajax从服务器中提取额外的内容。祝你好运
@{
    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();
}
<script>
  window.onload = function() {
     setTimeout(function() {}, 1000); // this will run 1 second after page load
  }
</script>