使用jquery / signalr传递参数的问题

时间:2016-12-27 00:34:56

标签: jquery asp.net-mvc signalr

我正在使用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>

所以我的问题有两个:

  1. 如果我使用常量调用我的集线器,则方法调用有效(使用VS调试器验证):

    hub.server.broadcastnewcomment(“你好”,“你好”,2);

  2. 但是,如果我使用模型中的变量,则永远不会调用该方法:

    hub.server.broadcastnewcomment(@Model.Comment, @Model.CommenterId, @Model.UserParticipationId);
    

    为了让它更加令人困惑(无论如何),以下行始终有效:

    hub.server.subscribetogroup(@Model.UserParticipationId);
    
    1. 如何使用jquery混合模型变量(例如@ Model.CommenterId)和我从textarea读取的值。我已经评论了我的观点,但我不确定这是否是正确的方法。

1 个答案:

答案 0 :(得分:1)

在js函数的参数中使用单个代码作为字符串值。 @Model的字符串类型值必须包含在单个代码中,如下所示:

hub.server.broadcastnewcomment('@Model.Comment', '@Model.CommenterId', @Model.UserParticipationId);