Как мне заставить SignalR работать внутри _Layout.cshtml? - PullRequest
2 голосов
/ 20 марта 2012

Я сейчас работаю над проектом 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>

Мой класс NotificationsHub находится в папке с именем NotificationsHub, которая находится на том же уровне каталогов, что и мои представления.

Я попробовал это на .html-файле, и он отлично работает (я получаю обратный вызов оповещения для $ .connection.hub.start).

Что мне здесь не хватает?

Спасибо

1 Ответ

3 голосов
/ 20 марта 2012

Это странно, я не могу воспроизвести проблему. Вот мой макет:

<!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>

Работает отлично. Убедитесь, что у вас нет ошибок ссылок на сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...