2016-12-27 3 views
0

MVCとSignalRを使用して簡単なコメントセクションを作成しています。最初に、コメントビューはハブにサブスクライブします(グループ名の作成に使用される「UserParticipationId」を使用)。その後、誰かがコメントを残すと、ビューはハブ(chathub)にコメントを送信し、chathubはgroupnameを使用してすべてのビューにメッセージをブロードキャストします。jquery/signalrを使用してパラメータを渡す際の問題

は、だから私のハブの2つの方法がある:

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> 

だから私の質問は2つあり:

  1. た場合、私は私のハブを定数で呼び出すと、メソッド呼び出しが動作します(VSデバッガを使って検証します):

    hub.server.broadcastnewcomment( "Hello"、 "hi"、2);私は私のモデルから変数を使用する場合

しかし、メソッドが呼び出されることは決してありません:

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

は(とにかく私には)それがさらに混乱にするために、次の行は、常に動作します。

hub.server.subscribetogroup(@Model.UserParticipationId); 
  1. モデル変数(例:@ Model.CommenterId)と、jqueryを使用してテキストエリアから読み取った値をどのように組み合わせるのですか。私は私の見解に何があるのか​​コメントしましたが、これが正しい方法であるかどうかはわかりません。
+0

は、私はいくつかのより多くのテストを実行され、いくつかの理由で、broadcastnewcommentの問題は、私は文字列型の変数を送信しようとすると表示されているように見える:@ModelのString型の値は次のように単一のコード内にラップする必要があります。私はちょうどint変数の束にメソッドのパラメータを置き換えようとしました、そして、呼び出しは働いた。 –

答えて

1

js関数のパラメータで文字列値に単一コードを使用します。

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

うわー、ありがとう@Ankit Sahrawat。チャームのように働いた! –

+0

これはうまくいくかもしれませんが、私は引用符をエスケープすることを強くお勧めします...あなたが編集可能なコメントがあれば大きなXSSリスクがあります。 – thab

関連する問題