在没有刷新的情况下,SignalR不会自动更新CSHTML。

问题描述 投票:0回答:1

我试图在数据库中添加新条目时,用webapi和signalR建立一个网站。

但正如标题所言,如果不刷新网站,新条目就不会被添加。虽然它确实显示了数据库的条目。

[HttpGet]
    public IEnumerable<TeamManager.Team> GetAllTeams()
    {
        List<TeamManager.Team> Teamlist = new List<TeamManager.Team>();
        string mainconn = ConfigurationManager.ConnectionStrings["Myconnection"].ConnectionString;
        SqlConnection sqlconn = new SqlConnection(mainconn);
        string sqlquery = "Select * from [Escapehaarlem].[Team]";

        SqlDataReader reader = null;

        SqlDependency.Start(mainconn);

        try
        {
            SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn);
            //sqlcomm.CommandType = CommandType.Text;
            sqlconn.Open();

            sqlcomm.Notification = null;

            SqlDependency dependency = new SqlDependency(sqlcomm);
            dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

            reader = sqlcomm.ExecuteReader();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    Teamlist.Add(new TeamManager.Team()
                    {
                        TeamID = Convert.ToInt32(reader.GetValue(0)),
                        Teamnaam = reader.GetValue(1).ToString(),
                        AantalPersonen = Convert.ToByte(reader.GetValue(2)),
                        Eindtijd = reader.GetValue(3).ToString(),
                        Datum = Convert.ToDateTime(reader.GetValue(4)),
                    });
                }

            }
            reader.Close();
        }
        catch
        {

        }
        finally
        {
            if (reader != null) { reader.Close(); }
            sqlconn.Close();
        }
        return Teamlist;
    }

这是Webapi的代码,这个GET功能应该在网站上显示。

此外,这是我用于网站本身的CSHTML代码。

<div id="body">
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h1>Leader Board</h1>
            </hgroup>
        </div>
    </section>
    <section class="content-wrapper main-content clear-fix">
        <h1>
            <span>
                Top Challengers
                @*<img src="Images/goals_256.png" style="width:40px; height:60px;" />*@
            </span>
        </h1>
        <table id="tblRank" class="table table-striped table-condensed table-hover"></table>
    </section>
</div>

@section scripts{
    @Scripts.Render("~/Scripts/jquery.signalR-2.4.1.min.js")
    @Scripts.Render("~/signalr/hubs")

    <script type="text/javascript">
        $(function () {
            var rank = $.connection.leaderboardHub;
            rank.client.displayLeaderBoard = function () {
                LoadResult();
            };

            $.connection.hub.start();
            LoadResult();
        });

        function LoadResult() {
            var $tbl = $("#tblRank");
            $.ajax({
                url: 'https://escapehaarlemhighscore.nl/api/game/GetAllteams',
                type: 'GET',
                datatype: 'json',
                success: function (data) {
                    if (data.length > 0) {
                        $tbl.empty();
                        $tbl.append('<thead><tr><th>Rank</th><th></th><th></th><th>Best</th><th>Achieved</th></tr></thead>');
                        var rows = [];
                        for (var i = 0; i < data.length; i++) {
                            rows.push('<tbody><tr><td>' + (i + 1).toString() + '</td><td>' + data[i].Teamnaam + '</td><td>' + data[i].AantalPersonen + '</td><td>' + data[i].Eindtijd + '</td><td>' + data[i].Datum + '</td></tr></tbody>');
                        }
                        $tbl.append(rows.join(''));
                    }
                }
            });
        }
    </script>
}

谁能给我解释一下为什么网站在没有刷新的情况下不会更新,以及如何使之成为可能。

EDIT

这是我用在集线器上的代码。

using Microsoft.AspNet.SignalR;

namespace GebruikerService
{
    public class LeaderboardHub : Hub
    {
        public static void Show()
        {
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<LeaderboardHub>();
            context.Clients.All.displayLeaderBoard();
        }
    }
}

这是我的启动程序

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(GebruikerService.Startup))]

namespace GebruikerService
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888
            app.MapSignalR();
        }
    }
}

先谢谢你

c# razor signalr
1个回答
0
投票

你缺少控制器方法对Hub的实际调用。

只是在阅读器关闭后添加

LeaderboardHub.Show()

为了更好的调试,你可以通过以下方式添加signalR日志记录。文件

© www.soinside.com 2019 - 2024. All rights reserved.