我正在研究一个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的警报回调)。
我在这里缺少什么?
由于
答案 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>
完美无缺。确保没有脚本引用错误。