我正在完成一个 SignalR 演示,该演示在按下按钮时在列表中显示数据库信息。
My Hub 有两个功能:一个是从列表中删除数据库对象,另一个是重新添加数据库对象到该列表。
这些功能在我的视图中执行,并且在我只打开一次页面时执行得很好。但是如果我在另一个选项卡中打开页面(可以是相同的浏览器或不同的浏览器),页面不会保持同步。意思是,当一个页面的按钮被点击时,另一个页面没有正确显示数据。
通常一个页面会很好,而另一个页面会执行删除而不是添加!这令人难以置信。根据我的理解,它们应该只是彼此的反映。
有没有其他人遇到过类似的事情?提前感谢您的帮助!
这是我的集线器:
[HubName("hubtest")]
public class HubTest : Hub
{
CmsContext db = new CmsContext();
public void showdata()
{
var f = from x in db.Data
select x;
Clients.remove();
Clients.add(f);
}
}
这是我的功能视图中的javascript:
<script src="Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-0.5.2.min.js" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var hubtest = $.connection.hubtest;
hubtest.remove = function () {
//clear list of any prior values
var list = document.getElementById('dataList');
while (list.hasChildNodes()) {
list.removeChild(list.childNodes[0])
}
};
hubtest.add = function (data) {
//populate with updated values
for (var i = 0; i < data.length; i++) {
var element = data[i];
$('#dataList').append('<li>' + element.Question + '</li>');
}
};
$("#broadcast").click(function () {
hubtest.showdata();
});
// Start the connection
$.connection.hub.start();
});
</script>
<input type="button" id="broadcast" value="broadcast" />
<ul id="dataList">
</ul>