0

我正在 MVC 5 和 SignalR 中开发一个项目,以便在 SQL Server 数据库更改时实时更新视图。我的观点是这样的:

@model IEnumerable<iCare.Models.HttpPop3>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<div class="row">
    <div class="col-md-12">
        <div id="httpPop3sTable"></div>
    </div>
</div>
@section Scripts{
    <script src="/Scripts/jquery.signalR-2.1.2.js"></script>
    <!--Reference the autogenerated SignalR hub script. -->
    <script src="/signalr/hubs"></script>
    <script type="text/javascript">
        $(function () {
            // Declare a proxy to reference the hub.
            var notifications = $.connection.tableHub;

            //debugger;
            // Create a function that the hub can call to broadcast messages.
            notifications.client.updateHttpPop3s = function () {
                getAllHttpPop3s()

            };
            // Start the connection.
            $.connection.hub.start().done(function () {
                alert("connection started")
                getAllHttpPop3s();
            }).fail(function (e) {
                alert(e);
            });
        });


        function getAllHttpPop3s() {
            var tbl = $('#httpPop3sTable');
            $.ajax({
                url: '/httpPop3/GetHttpPop3s',
                contentType: 'application/html ; charset:utf-8',
                type: 'GET',
                dataType: 'html'
            }).success(function (result) {
                tbl.empty().append(result);
            }).error(function () {

            });
        }
    </script>
}

我想为所有视图添加 SignalR a Noty 引用,而不是每次都输出这些。所以我用谷歌搜索并将以下代码添加到我的项目中:

BundleConfig.cs

            bundles.Add(new ScriptBundle("~/bundles/noty").Include(
                        "~/Scripts/noty/layouts/",
                        "~/Scripts/noty/themes/",
                        "~/Scripts/noty/jquery.noty.js"));

        bundles.Add(new ScriptBundle("~/bundles/SignalR").Include(
                        "~/Scripts/jquery-2.1.1.js",
                        "~/Scripts/jquery.signalR-2.1.2.js",
                        "~/Scripts/hubs.js"));

_Layout.cshtml

@Scripts.Render("~/bundles/noty")
@Scripts.Render("~/bundles/signalr")

但是当我运行一个使用 SignalR 的视图时,它说找不到集线器,并且 noty 的布局没有在页面中呈现。

谢谢

4

1 回答 1

1

我为 SignalR 找到了一个很好的解决方案:

在 BundleConfig.cs 我替换了

            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js",
                    "~/Scripts/jquery.signalR-2.1.2.js",
                    "~/Scripts/hubs.js"));

在 _Layout.cshtml

    @Scripts.Render("~/bundles/jquery")

这是/Scripts/hubs.js:

(function ($) {
$.ajax({
    url: "/signalr/hubs",
    dataType: "script",
    async: false
});
}(jQuery));

我还没有尝试过 Noty,但我认为这不会有所不同。

于 2014-11-05T14:23:24.993 回答