如何在_Layout.cshtml中使SignalR工作?

时间:2012-03-20 10:39:59

标签: asp.net-mvc-3 signalr

我正在研究一个MVC3项目,刚刚开始使用SignalR。

我已经按照了几个演示,但当我的代码在 \ Views \ Shared_Layout.cshtml 中时,我似乎无法使其正常工作。我总是得到“必须先启动连接才能发送数据。”错误。

请参阅下面的代码:

我的班级:

 [HubName("notificationsHub")]
 public class NotificationsHub : Hub
 {
    public void updateServer()
    {
        Clients.updateClient("boom");
    }
 }

我在_Layout.cshtml中的脚本:

    $(function(){
       var signalR = $.connection.notificationsHub;

       signalR.updateClient = function (message) {
          alert(message);
       };        

       $("#open").click(function () {
          signalR.updateServer();
       });

       $.connection.hub.start(function () {
          alert("Connected");
       });
    });

脚本参考:

   <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.6.4.js")"></script>
   <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.signalR.js")"></script>
   <script type="text/javascript" src="@Url.Content("~/signalr/hubs")"></script>

My NotificationsHub Class位于名为NotificationsHub的文件夹中,该文件夹与我的视图具有相同的目录级别。

我在.html文件上试过这个并且它运行正常(我得到$ .connection.hub.start的警报回调)。

我在这里缺少什么?

由于

1 个答案:

答案 0 :(得分:3)

这很奇怪,我无法重现这个问题。这是我的布局:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.6.4.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.signalR.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/signalr/hubs")"></script>
    <script type="text/javascript">
        $(function () {
            var signalR = $.connection.notificationsHub;

            signalR.updateClient = function (message) {
                alert(message);
            };

            $("#open").click(function () {
                signalR.updateServer();
            });

            $.connection.hub.start(function () {
                alert("Connected");
            });
        });    
    </script>
</head>
<body>
    @RenderBody()
    <a href="#" id="open">Open</a>
</body>
</html>

完美无缺。确保没有脚本引用错误。