2016-12-27 2 views
0

Я пишу простой раздел комментариев, используя MVC и SignalR. Во-первых, Comment View подписывается на концентратор (используя «UserParticipationId», который будет использоваться для создания имени группы). Затем, как только кто-то оставит комментарий, представление отправит комментарий в концентратор (chathub), и chathub будет транслировать сообщение на все представления, используя имя группы.Проблема с параметром прохождения с использованием jquery/signalr

Так два метода моего хаба являются:

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);

Однако, если использовать переменные с моей моделью, метод никогда не вызывается:

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

Чтобы сделать его еще более запутанной (для меня во всяком случае), следующая строка всегда работает:

hub.server.subscribetogroup(@Model.UserParticipationId); 
  1. Как объединить переменные модели (например, @ Model.CommenterId) и значение, которое я прочитал из текстового поля, используя jquery. Я прокомментировал то, что у меня есть, но я не уверен, что это правильный способ сделать это.
+0

Я был запущены еще несколько тестов и по какой-то причине, вопрос с broadcastnewcomment, кажется, появляется, когда я пытаюсь отправить переменные типа строки. Я просто попытался заменить параметры метода на кучу переменной int, и вызов работал. –

ответ

1

Используйте одиночные коды для строковых значений в параметрах функции js. значения типа Строки @model должны быть завернуты в одиночных кодах так:

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

ничего себе, спасибо огромное @Ankit Sahrawat. Работал как шарм! –

+0

Хотя это может сработать, я настоятельно рекомендую избегать цитат ... У вас большой риск XSS, если комментарий когда-либо редактируется пользователем. – thab

Смежные вопросы