我有一个简单的应用程序,如聊天,与SignalR
集成。我在我的Hub上添加了一个新方法,并在客户端添加了一个新功能,如下所示。
问题是,我的方法SendMessageChat
没有被触发,因为发生了以下错误
TypeError: chat2.server.SendMessageChat is not a function
但方法chat2.server.send
工作正常,我不知道为什么我的第二种方法不起作用。有人能帮助我吗?
的JavaScript
$(function () {
var chat2 = $.connection.redirectTask;
chat2.client.broadcastMessage = function (name, message) {
// Do something here
};
chat2.client.sendMessage = function (name, message) {
// Do something here
};
//$.connection.hub.logging = true;
$.connection.hub.start().done(function () {
/* BUTTON CLICK IN ANOTHER PAGE */
$('#btnFinish').click(function () {
chat2.server.send($.cookie("User"), $("#lista :selected").text());
});
/* CASE HIT ENTER INSIDE THE TEXT FIELD IN CHAT */
$(document).on("keypress", "#txtChat", function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code == 13) {
var message = $(this).val();
$(this).val("");
chat2.server.SendMessageChat($.cookie("User"), message);
}
});
});
});
服务器端
public class RedirectTask : Hub
{
public void Send(string nome, string message)
{
Clients.All.broadcastMessage(name, message);
}
public void SendMessageChat(string nome, string message)
{
Clients.All.sendMessage(name, message);
}
}
答案 0 :(得分:3)
需要更改为
chat2.server.sendMessageChat($.cookie("User"), message);
JavaScript客户端中方法名称的Camel-casing
默认情况下,JavaScript客户端通过使用方法名称的驼峰版本来引用Hub方法。 SignalR自动进行此更改,以便JavaScript代码符合JavaScript约定。
服务器
public void NewContosoChatMessage(string userName, string message)
使用生成代理的JavaScript客户端
contosoChatHubProxy.server.newContosoChatMessage(userName, message);
如果要为要使用的客户端指定其他名称,请添加HubMethodName属性。
服务器
[HubMethodName("PascalCaseNewContosoChatMessage")]
public void NewContosoChatMessage(string userName, string message)
使用生成代理的JavaScript客户端
contosoChatHubProxy.server.PascalCaseNewContosoChatMessage(userName, message);