【发布时间】:2016-09-29 14:12:37
【问题描述】:
我想在管理员生成新警报消息时自动更新或实时通知用户。
以下是我的代码解决方案,它没有给出任何构建错误,并且在第一次加载页面时还调用启动和集线器方法。但是,我希望当管理员使用 NewMessage 页面添加新消息时,它应该实时自动更新 MyHomePage 而这不起作用。
我有 Myalerts 表,并且我通过 ENABLE_BROKER 启用了我的数据库代理。
以下是我在解决方案中的代码 -
HomeControler 代码 -
public ActionResult MyAlerts()
{
var AlertsNMessages = AlertsMessagesList();
var ajaxGridFactory = new AjaxGridFactory();
var grid = ajaxGridFactory.CreateAjaxGrid(AlertsNMessages, 1, false);
return PartialView("MyAlerts", grid);
}
void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
AlertsMessagesHub messageHub = new AlertsMessagesHub();
messageHub.Send();
}
}
public IQueryable<SiteAlert> AlertsMessagesList()
{
var model = GetCustomerAccessListData();
var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString);
SqlDependency dependency = new SqlDependency();
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed) connection.Open();
SqlDependency.Start(connection.ConnectionString);
return db.MyAlerts.OrderByDescending(o => o.AlertId).AsQueryable();
}
我的主页 - JavaScript --
$(function () {
debugger;
// Declare a proxy to reference the hub.
var notifications = $.connection.alertsMessagesHub;
//debugger;
// Create a function that the hub can call to broadcast messages.
notifications.client.updateMessages = function () {
getAllMessages()
};
// Start the connection.
$.connection.hub.start().done(function () {
notifications.server.send();
}).fail(function (e) {
alert(e);
});
});
function getAllMessages() {
debugger;
var tbl = $('#DivMyMessages');
$.ajax({
url: '/home/MyAlerts',
contentType: 'application/html ; charset:utf-8',
type: 'GET',
dataType: 'html'
}).success(function (result) {
tbl.empty().append(result);
}).error(function () {
});
}
</script>
HTML代码-
<div id="DivMyMessages">
@{Html.RenderAction("MyMessages");}
</div>
我使用 Grid.MVC.AJAX 的部分视图
sing GridMvc.Html
@model Grid.Mvc.Ajax.GridExtensions.AjaxGrid<DashboardSite.Models.MyAlerts>
@Html.Grid(Model.GridItems).Named("MyAlerts").Columns(columns =>
{
columns.Add(o => o.AlertType)
.SetWidth(3)
.Encoded(false)
.Sanitized(false)
.Titled("")
columns.Add(a => a.StartTime).SetWidth(150)
.SetWidth(10)
.Encoded(false)
.Sanitized(false)
.Titled("Start Date")
.Sortable(false)
columns.Add(a => a.Title).SetWidth(150)
.SetWidth(175)
.Encoded(false)
.Sanitized(false)
.Titled("Title")
.Sortable(false)
}).WithPaging(5, 10, "MyAlerts")
我用来添加新消息的 NewMessage 是通过 AdminController 方法。
现在,我的 SignalR 在第一次加载时正常启动,但我希望在添加新消息时它应该使用 sql 依赖项自动刷新 myhomepage 网格。
我还在 global.asax 中添加了 SqlDependency.start(connectionstring)
【问题讨论】:
标签: .net asp.net-mvc signalr signalr-hub