我正在使用asp.net中的Signalr开发一个聊天应用程序。在那,我使用javascript signalr客户端连接到Chathub服务器。
我遇到一个问题,因为未捕获的类型错误$()。chatbox不是一个有效的函数
$('#' + ctrId).chatbox({
id: ctrId,
title: chatTitle,
user: userName,
offset: getNextOffset(),
width: 200,
messageSent: function (id, user, msg) {
chatHub.server.sendPrivateMessage(userId, msg);
TypingFlag = true;
},
boxClosed: function (removeid) {
$('#' + removeid).remove();
var idx = showList.indexOf(removeid);
if (idx != -1) {
showList.splice(idx, 1);
diff = config.width + config.gap;
for (var i = idx; i < showList.length; i++) {
offset = $("#" + showList[i]).chatbox("option", "offset");
$("#" + showList[i]).chatbox("option", "offset", offset - diff);
}
}
}
});
FYI
无需使用MasterPage即可正常工作。只有在母版页内使用时才会出现此问题。声明了一个WebUserControl,并在MasterPage中使用Register关键字进行了注册。
这是我的WebUserControl设计器页面
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ctlChatBox.ascx.cs" Inherits="ctlChatBox" %>
<div id="chat_widnow">
<div id="chat_title_bar"> <span class="col-sm-9 text-primary"><strong>Online Users</strong></span>
<div id="chat_min_button"><i class="fa fa-plus-square"></i></div>
</div>
<div id="chat_box" style="display: none;overflow-y:auto;">
</div>
</div>
<div id="chat_div"></div>
<input id="hdId" type="hidden" />
<input id="hdUserName" type="hidden" />
<asp:HiddenField ID="hdnCurrentUserName" runat="server" />
<asp:HiddenField ID="hdnCurrentUserID" runat="server" />
<script src="<%=Page.ResolveUrl("~") %>Scripts/jquery.signalR-2.2.0.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="<%=Page.ResolveUrl("~") %>signalr/hubs"></script>
<link href="<%=Page.ResolveUrl("~") %>styles/jquery.ui.chatbox.css" rel="stylesheet" />
<script src="<%=Page.ResolveUrl("~") %>scripts/jquery.ui.chatbox.js"></script>
<script src="<%=Page.ResolveUrl("~") %>scripts/chatboxManager.js"></script>