情况
我有一个ASP.NET Webform,其中包含有关用户Microsoft Lync 2010会话的一些状态信息。在Page_Load事件中,我注册了一个事件处理程序,用于侦听Lync会话状态更改事件。
事件触发后,事件处理程序会正确响应并完成其工作:它会更改特定标签的相应文本。问题是,这些更改在前端网页中不可见。
代码
这是一个全局Lync Client实例,在页面中定义。
private LyncClient _lyncClient;
这里我在Page_Load事件中注册了LyncClient。
protected void Page_Load(object sender, EventArgs e)
{
RegisterLyncClient();
}
我将LyncClient实例分配给全局_lyncClient。之后我注册了我的事件监听器。
private void RegisterLyncClient()
{
_lyncClient = LyncClient.GetClient();
_lyncClient.StateChanged += HandleStateChanged;
}
当Lync Client更改其状态时,将正确触发此函数。它在调试模式下可见。
private void HandleStateChanged(object sender, ClientStateChangedEventArgs e)
{
SetLyncStatus(e.NewState);
}
标签文本已正确更改(在调试模式下)。但是这些变化在前端是不可见的。
private void SetLyncStatus(ClientState lyncState)
{
lblLyncStatus.Text = lyncState.ToString();
}
假设
如果我使用按钮手动更改状态,或者如果我每秒使用计时器检查并调整状态,则可以看到更改。所以我假设在HandleStateChanged事件处理程序中所做的更改是不可见的,因为在调用SetLyncStatus函数之后没有回发。
问题
是否可以强制从事件处理程序回发,而不是从用户操作触发(例如用户单击按钮)?如果可以调用部分刷新标签或定义的部分,那将是完美的。
任何建议都非常感谢。谢谢!
答案 0 :(得分:2)
在尝试实施任何解决方案之前,请尝试了解客户端上运行的内容。也许您拥有桌面开发背景,因此您还需要了解Web的无状态特性。服务器端发生的任何更改都不会反映在客户端,反之亦然。一旦服务器响应了请求,它就不会自动将状态更新传达给客户端。因此,在您的情况下,一个偶然驱动的方法将无效。您需要从客户端执行ping操作以确定状态更改。可以使用具有预定义周期间隔的AJAX来完成此ping。