Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Can';t从服务器调用客户端函数_Asp.net Mvc_Signalr - Fatal编程技术网

Asp.net mvc Can';t从服务器调用客户端函数

Asp.net mvc Can';t从服务器调用客户端函数,asp.net-mvc,signalr,Asp.net Mvc,Signalr,我正在研究一个小概念,试图与信号员合作。 在这个场景中,当其中一个客户端执行更新时,所有连接的客户端都需要刷新,这个更新是通过Ajax请求执行的。 因为页面可能有不同的实例,这取决于一个参数,所以我使用组 客户端代码如下所示: <script> window.onload = function () { DoRefresh(); } $(function () { var hub = $.connection.commonHu

我正在研究一个小概念,试图与信号员合作。 在这个场景中,当其中一个客户端执行更新时,所有连接的客户端都需要刷新,这个更新是通过Ajax请求执行的。 因为页面可能有不同的实例,这取决于一个参数,所以我使用组

客户端代码如下所示:

<script>
    window.onload = function () {
        DoRefresh();
    }

    $(function () {
        var hub = $.connection.commonHub;
        hub.client.refresh = function () {
            DoRefresh();//This doesn't get called for the other clients
        };
        $.connection.hub.start();
        $.connection.hub.start().done(function () {
            hub.server.join("MyPage" + @Model.Id + "");
        });
    });

    function htmlEncode(value) {
        var encodedValue = $('<div />').text(value).html();
        return encodedValue;
    }

    function DoRefresh() {
        $.ajax({
            url: '@Url.Action("LoadData")',
            cache: false,
            data: "&id=" + @Model.Id + "",
            success: function (html) {
                $("#conversation").empty();
                $("#conversation").append(html);
            },
            error: function (xhr, status, err) {
                alert('Response code:' + xhr.status + '\r\n[Error:' + err + '] ' + status);
            }
        });
        return false;
    };

    function DoUpdate() {
        $.ajax({
            url: '@Url.Action("DoUpdate")',
            cache: false,
            data: "&id=" + @Model.Id + "&posterID=" + @userAccount.AccountID + "&message=" + $("#Textbox").val().replaceAll("\n", "[br]"),
            success: function () {
                $("#Textbox").empty();
                DoRefresh();
            },
            error: function () {
                $("#Textbox").empty();
                DoRefresh();
            }
        });
        return false;
    };
</script>
最后,我的hub类如下所示:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.SignalR;
using MyProject.Models;

namespace MyProject.Hubs
{
    public class CommonHub : Hub
    {
        private string myInfo;

        public override Task OnConnected()
        {
            myInfo = Context.ConnectionId;

            return base.OnConnected();
        }

        public Task Join(string groupName)
        {
            return Groups.Add(Context.ConnectionId, groupName);
        }

        public Task Leave(string groupName)
        {
            return Groups.Remove(Context.ConnectionId, groupName);
        }

        public void Refresh(string groupName)
        {
            var context = GlobalHost.ConnectionManager.GetHubContext<CommonHub>();
            context.Clients.Group(groupName).Refresh();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Data.Entity;
使用System.Linq;
使用System.Threading.Tasks;
使用System.Web;
使用Microsoft.AspNet.signal;
使用MyProject.Models;
名称空间MyProject.Hubs
{
公共类CommonHub:Hub
{
私有字符串myInfo;
已连接的公用覆盖任务()
{
myInfo=Context.ConnectionId;
返回base.OnConnected();
}
公共任务联接(字符串组名)
{
返回Groups.Add(Context.ConnectionId,groupName);
}
公共任务休假(字符串组名)
{
返回Groups.Remove(Context.ConnectionId,groupName);
}
公共无效刷新(字符串组名)
{
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.Group(groupName.Refresh();
}
}
}
每次连接新浏览器窗口时,都会调用中心中的
Join
任务。
Refresh
方法在集线器上被调用,但只有调用窗口的页面被刷新。客户端
refresh
函数在调试时仅被调用一次,可能是针对调用的客户端


我不知道其他客户端为什么没有进行更新,请帮助。

在您的更新操作中,
hub.Refresh(“MyPage”+item.Id)中如何定义
hub
?它在控制器内声明为全局变量。我已经编辑了OP以包含声明。显然不是信号器出错,但是LoadData操作没有正确地获取更新的数据。现在一切都好了。
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.SignalR;
using MyProject.Models;

namespace MyProject.Hubs
{
    public class CommonHub : Hub
    {
        private string myInfo;

        public override Task OnConnected()
        {
            myInfo = Context.ConnectionId;

            return base.OnConnected();
        }

        public Task Join(string groupName)
        {
            return Groups.Add(Context.ConnectionId, groupName);
        }

        public Task Leave(string groupName)
        {
            return Groups.Remove(Context.ConnectionId, groupName);
        }

        public void Refresh(string groupName)
        {
            var context = GlobalHost.ConnectionManager.GetHubContext<CommonHub>();
            context.Clients.Group(groupName).Refresh();
        }
    }
}