我正在使用MVC和SignalR编写一个简单的评论部分。首先,Comment View订阅集线器(使用将用于创建组名的“UserParticipationId”)。然后,一旦有人留下评论,视图将发送评论到集线器(称为chathub),并且chathub将使用组名将消息广播到所有视图。
所以我的中心的两种方法是:
public void subscribetogroup(int userparticipationid)
{
Groups.Add(Context.ConnectionId, userparticipationid.ToString());
}
public void broadcastnewcomment(string comment, string commenterid, int userparticipationid)
{
Comment cmt = new Comment
{
CommenterId = commenterid,
CommentDate = DateTime.Now,
UserParticipationId = userparticipationid,
CommentText = comment
};
//_commentRepository.AddCommentToUserParticipation(cmt);
Clients.Group(userparticipationid.ToString()).displaynewcomment(comment);
}
我视图中的脚本代码是:
<script>
$(function () {
var hub = $.connection.chathub;
hub.client.displaynewcomment = function (comment) {
alert(comment);
};
//hub.client.displaynewcomment = function (comment) {
// Html.RenderPartial("_CommentCardPartial", comment);
//};
$.connection.hub.start().done(function () {
hub.server.subscribetogroup(@Model.UserParticipationId);
$('#CommentButton').click(function () {
//var enteredcomment = $('#CommentText').val();
@*hub.server.broadcastnewcomment(enteredcomment, @Model.CommenterId, @Model.UserParticipationId);*@
hub.server.broadcastnewcomment("Hello", "hala", 2);
});
});
});
</script>
所以我的问题有两个:
如果我使用常量调用我的集线器,则方法调用有效(使用VS调试器验证):
hub.server.broadcastnewcomment(“你好”,“你好”,2);
但是,如果我使用模型中的变量,则永远不会调用该方法:
hub.server.broadcastnewcomment(@Model.Comment, @Model.CommenterId, @Model.UserParticipationId);
为了让它更加令人困惑(无论如何),以下行始终有效:
hub.server.subscribetogroup(@Model.UserParticipationId);
答案 0 :(得分:1)
在js函数的参数中使用单个代码作为字符串值。 @Model的字符串类型值必须包含在单个代码中,如下所示:
hub.server.broadcastnewcomment('@Model.Comment', '@Model.CommenterId', @Model.UserParticipationId);