ASP.NET:如何在订阅的事件处理程序中更新前端



的情况

我有一个ASP.NET Web表单,其中包含有关用户Microsoft Lync 2010会话的一些状态信息。在Page_Load事件中,我注册了一个列出Lync会话状态更改事件的事件处理程序。

一旦事件触发,事件处理程序就会做出正确的反应并完成其工作:它根据特定标签的文本进行更改。问题是,这些更改在前端网页中不可见。

代码

这是在页面中定义的全局Lync客户端实例。

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客户端更改其状态时,此功能将正确启动。它在调试模式下可见。

private void HandleStateChanged(object sender, ClientStateChangedEventArgs e)
{
     SetLyncStatus(e.NewState);
}

标签文本已正确更改(在调试模式期间(。但这些变化在前端并不明显。

private void SetLyncStatus(ClientState lyncState)
{
    lblLyncStatus.Text = lyncState.ToString();
}

假设

如果我使用按钮手动更改状态,或者如果我使用计时器每秒检查和调整状态,则更改是可见的。因此,我假设HandleStateChanged事件处理程序中所做的更改是不可见的,因为在调用SetLyncStatus函数后没有回发。

问题

是否可以从事件处理程序强制回发,而不是从用户操作(例如,用户单击按钮(触发回发?如果可以调用标签或已定义节的部分刷新,那么这将是完美的。

非常感谢任何建议。谢谢

在尝试实现任何解决方案之前,请先了解什么在客户端上运行,什么在服务器上运行。也许您有桌面开发背景,因此您还需要了解web的无状态性。服务器端发生的任何更改都不会反映在客户端,反之亦然。一旦服务器对请求做出响应,它就不会自动将状态更新传递给客户端。因此,在你的情况下,一种公平驱动的方法是行不通的。您需要从客户端执行ping以确定状态更改。这个ping可以使用AJAX以预定义的周期性间隔来完成。

相关内容

  • 没有找到相关文章

最新更新