检索计数语句并通过signalR发送给客户端

时间:2016-06-10 10:39:52

标签: javascript asp.net-mvc signalr signalr-hub signalr.client

我目前是一名学生,正在为我的学校做迷你项目。我完全是signalR的新手。请帮帮我。

我正在尝试从数据库中获取计数并将其返回并发送给调用该方法/函数的客户端。然后客户端将显示在网页中。

启动

using Microsoft.Owin;
using Owin;
using mini_project;

namespace mini_project
{
public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.MapSignalR();
    }
}
}

集线器

public class queryHub : Hub
{
    private static mpDBEntities db = new mpDBEntities();
    private int noG { get; set; }
    public void GetStatusG()
    {
        var x = db.Database.ExecuteSqlCommand("select COUNT(Room_Status.Status) from Room_Cur_Status, Room_Status where Room_Status_Id = Room_Status.Id AND Room_Status.Status = 'G'");
        //var x = db.Room_Cur_Status
        //    .Where(o => o.Room_Status.Status.Equals('G'))
        //    .Select(o => o.Room_Status.Status)
        //    .Count();
        Clients.All.getG(x);
    }
}

客户代码

<script>
    var chat;
    var noG;
    $(document).ready(function () {
        chat = $.connection.queryHub;
        function Test() {
            noG = chat.client.getG;
        }
        $.connection.hub.start()
                    .done(function () {
                        console.log('connected');
                        Test();
                        console.log('Got It');
                        document.getElementById('test1').innerHTML = noG
                    })
                .fail(function (ex) {
                    console.log('not connected' + ex);
                });
    });
</script>
</head>
<body>
    <div> 
        <p id="test1"></p>
    </div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您需要在集线器的getG处理程序中定义document.ready功能,如此

chat.client.getG = function(x) {
  alert("I have received a value, here it is..." + x);
};

此外,您可能无法在任何地方调用Hub方法,我通常希望提供HubMethodName属性

[HubMethodName("GetStatusG")]
public void GetStatusG()
{
    var x = db.Database.ExecuteSqlCommand("select COUNT(Room_Status.Status) from Room_Cur_Status, Room_Status where Room_Status_Id = Room_Status.Id AND Room_Status.Status = 'G'");
    //var x = db.Room_Cur_Status
    //    .Where(o => o.Room_Status.Status.Equals('G'))
    //    .Select(o => o.Room_Status.Status)
    //    .Count();
    Clients.All.getG(x);
}

此外,我没有在您的客户端代码中看到您调用Hub方法的任何位置。试试这个

 <input type="button" id="update" value="Update" />

然后处理它

$(“#update”)。click(function(){  chat.server.GetStatusG(); });

因此您的客户端代码变为

<html>
<head>
<script>
    var chat;
    var noG;
    $(document).ready(function () {
        chat = $.connection.queryHub;
        chat.client.getG = function (x) {;
          $("#test1").html("Hey I received a new value of x... " + x);
        }

$("#update").click(function () {
 chat.server.GetStatusG();
});
        $.connection.hub.start()
                    .done(function () {
                        console.log('connected');
                        Test();
                        console.log('Got It');
                    })
                .fail(function (ex) {
                    console.log('not connected' + ex);
                });
    });
</script>
</head>
<body>
    <div> 
         <input type="button" id="update" value="Update" />
        <p id="test1"></p>

    </div>
</body>
</html>

Here is the Damien Edward's MoveShape example that works on the new version of SignalR