SignalR集线器方法

时间:2014-02-01 20:04:01

标签: jquery asp.net-mvc signalr

我有产品表,我想使用SignalR显示每个产品的实时投票金额。我不知道为什么$ .connection.hub.start()里面的jquery“each”方法不能正常工作。我尝试在$ .connection.hub.start()中放入$('td')。每个函数,但是在Hub中调试方法时会发生奇怪的事情:

<div class="products">
    <table class="tableClass">
        <tbody>
            <tr>
                @foreach (var item in Model.Products)
                {
                    <td class="@item.Id">
                        <span class="productId" hidden="hidden">@item.Id</span>
                        <img src="~/Images/imageNotFound.png" style="max-width: 420px; max-height: 420px" />
                        <span>@item.Name</span>
                        @*@Html.ActionLink("Vote", "AddVote", new { productId = item.Id }, new { type = "button" })*@
                        <input type="button" class="voteBtn" title="Vote" value="Vote" itemid="@item.Id" />
                        <br />
                        <span class="votesAmount"></span>
                    </td>
                }
            </tr>
        </tbody>
    </table>
    <span class="messageClass" style="color:red;"></span>
</div>

集线器:

public void VotesAmount(int productId, string className)
{
    GetVotesAmountResponse response = VoteService.GetVotesAmount(new GetVotesAmountRequest() { ProductId = productId });
    int votesAmount = 0;
    if (response.Status == true)
    {
        votesAmount = response.Amount;
        Clients.Caller.getVotesAmount(votesAmount, className);
    }
    else
    {
        Clients.Caller.getVotesAmount(votesAmount, className); 
    }
}

视图中的脚本:

vote.client.getVotesAmount = function (votesAmount, className) {
    $('td.'+className).find('span.votesAmount').text('VotesAmount: ' + votesAmount + ' ProductID:' + productId);
};

$('td').each(function () {
   $.connection.hub.start().done(function () {
   vote.server.votesAmount($(this).find('.productId').text(), $(this).attr('class'));
   });
})

我也试过了(虽然没有工作):

$.connection.hub.start().done(function () {
    $('td').each(function () {
        vote.server.votesAmount($(this).find('.productId').text(), $(this).attr('class'));
    });
});

1 个答案:

答案 0 :(得分:1)

第二个选项应该有效。问题在于回调方法中的产品ID。

vote.client.getVotesAmount = function (votesAmount, className) {
$('td.'+className).find('span.votesAmount').text('VotesAmount: ' + votesAmount + 

'ProductID:'+ productId);     };

此方法中没有

productid变量。所以我删除了它,它工作。您可以更好地分配值或删除它。