我有2个简单的aspx页面。在我的默认页面上,我有一个简单的标签,它使用ko.data绑定到Session变量。
我想如果我改变那个变量KnockoutJS会更新用户界面。当我点击sessionchanger页面上的按钮时,我改变了ko观察到的会话变量。我哪里做错了?
答案 0 :(得分:2)
您必须更改status
实例的viewModel
属性的值,以反映对ui的更改。
var vm = new viwModel;
ko.applyBindings(vm);
vm.status('new value');
将vm
对象绑定到body
而不是会话对象。您只需使用会话对象初始化vm.status
属性。
因此,您无法在其他页面的vm.status
中设置新值。
为了能够跟踪它,您应该使用客户端 - 服务器通信。它可以是AJAX,具有轮询功能或WebSocket。因此,您应该检查或监听服务器端,如果发生任何更改,您可以更新vm.status
属性,之后它将反映您所期望的ui。
答案 1 :(得分:1)
你不能这样做,因为 asp.net渲染引擎只是传递Session["target"]
的值,而不是任何指向该变量的链接,你的淘汰代码也不是'写得很好,请参阅 @Viktor Kukurba 回答,以便更清楚地了解如何使用和应用数据绑定。
要获得所需的结果,您可以使用下列技术之一:
<强>优选强>
使用WebSockets通过“会话变更”页面通知“默认”页面关于更改会话变量的信息。 查看教程Building real-time web apps with WebSockets using IIS, ASP.NET and WCF,了解如何应用该技术。
解决方法强>
作为解决方法,您可以在应用后续步骤后与所需行为非常相似:
Session["target"]
的值。refreshSessionTarger
),它会向新创建的asp.net http处理程序发送AJAX请求并更新可观察变量的值(因此,淘汰将反映该更改,但是请注意,您必须正确添加ko数据绑定。将步骤2中创建的refreshSessionTarger
函数放入setInterval函数作为回调,并设置以毫秒refreshSessionTarger
执行的频率间隔。
function refreshSessionTarger(){
// perform ajax request and update variable which holds session target
};
var delay = 5000;
setInterval(refreshSessionTarger, delay)