我正在使用Asp.net MVC,AngularJs,SignalR和Jquery创建聊天应用程序。 在聊天视图中,当我尝试设置聊天对象的值时,它传递空值,代码引用位于括号内(var chat = $。connection.chathub;)。因此,没有其他功能可行。 我在这个项目中使用“Microsoft.AspNet.SignalR.2.2.2”。和jquery和signalr相关的脚本,如'jquery.signalR-2.2.2.js,jquery-ui-1.12.1.js'以及其他一些jquery库。
任何人都可以帮助我吗?我附上了代码供您参考。
@section scripts{
@*@Scripts.Render("~/Scripts/jquery-ui-1.12.1.min.js")
@Scripts.Render("~/Scripts/jquery.signalR-2.2.2.min.js")*@
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
<script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script>
<script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>
<script type="text/javascript">
$(function () {
StartChat();
});
function StartChat() {
alert('StartChat');
var chat = $.connection.chathub;
alert('chat : ' + $.connection.chathub);
// Get logged in user
$('#UserIn').val($('#LoggedInUser').val());
chat.client.differentName = function (name) {
return false;
// Prompts for different user name
$('#UserIn').val($('#LoggedInUser').val());
chat.server.notify($('#UserIn').val(), $.connection.hub.id);
};
chat.client.online = function (name) {
// Update list of users
if (name == $('#UserIn').val())
$('#onlineusers').append('<div class="border" style="color:green">You: ' + name + '</div>');
else {
$('#onlineusers').append('<div class="border">' + name + '</div>');
$("#users").append('<option value="' + name + '">' + name + '</option>');
}
};
//
chat.client.enters = function (name) {
$('#chatlog').append('<div ><i>' + name + ' joins the conversation</i></div>');
$("#users").append('<option value="' + name + '">' + name + '</option>');
$('#onlineusers').append('<div class="border">' + name + '</div>');
};
// Create a function that the hub can call to broadcast chat messages.
chat.client.broadcastMessage = function (name, message) {
//display the message
$('#chatlog').append('<div class="border"><span style="color:orange">' + name + '</span>: ' + message + '</div>');
};
chat.client.disconnected = function (name) {
//Calls when someone leaves the page
$('#chatlog').append('<div ><i>' + name + ' leaves the conversation</i></div>');
$('#onlineusers div').remove(":contains('" + name + "')");
$("#users option").remove(":contains('" + name + "')");
};
// start the connection
$.connection.hub.start().done(function () {
alert('Send button clicked : ' + $('#message').val());
//Calls the notify method of the server
chat.server.notify($('#UserIn').val(), $.connection.hub.id);
$('#btnsend').click(function () {
alert('Send button clicked : ' + $('#message').val());
// Call the Send method on the hub.
chat.server.send($('#UserIn').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
})
}
</script>
}
@model ZupChatApp.Models.User
@{
ViewBag.Title = "ChatRoomView";
}
@Html.Label("LoggedInUser", Model.FirstName, new { id = "" })
<h2>Zup Chat Room View</h2>
<div class="LeftContent">
abcccc
</div>
<div class="CenterContent">
<div id="container">
<input type="hidden" id="nickname" />
<div id="chatlog"></div>
@*<div id="onlineusers">
<b>Online Users</b>
</div>*@
<div id="chatarea">
<div class="messagelog">
<textarea spellcheck="true" id="message" class="messagebox"></textarea>
</div>
<div class="actionpane">
<input type="button" id="btnsend" value="Send" class="btn btn-success col-md-offset-2 glyphicon-font" />
</div>
</div>
</div>
</div>
<div></div>
答案 0 :(得分:1)
This is probably an issue with the casing of chathub
. From the "Getting Started with SignalR 2" documentation:
在JavaScript中,对服务器类及其成员的引用是以camel为例。代码示例将JavaScript中的C#
ChatHub
类引用为chatHub
。
所以,将其改为
var chat = $.connection.chatHub;
此外,应在<script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script>
<script src="~/signalr/hubs"></script>
引用
答案 1 :(得分:1)
您应该始终使用sample from Microsoft的精确副本。不只是页面而是整个解决方案。让示例解决方案正常运行。
对于您不熟悉的任何技术都是如此。然后开始一次修改一件事来达到你的安排。
而且,这是我的页面(不久前)。比较并看看有什么不同:
@section scripts {
<!--Reference the SignalR library. -->
<script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
// Create a function that the hub can call to broadcast messages.
chat.client.broadcastMessage = function (customMessage) {
// Html encode display name and message.
var encodedName = $('<div />').text(customMessage.UserName).html();
var encodedMsg = $('<div />').text(customMessage.Message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>: ' + encodedMsg + '</li>');
};
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.sendCustomMessage({ "UserName": $('#displayname').val(), "Message": $('#message').val() });
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
</script>
}
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion"></ul>
</div>