سؤال

The situation

I have an ASP.NET Webform that contains some status information about a users Microsoft Lync 2010 session. In the Page_Load event i registered an event handler that listenes for a Lync session status change event.

Once the event fires, the event handler reacts correctly and does its job: it changes the according text of a specific label. The problem is, the changes are not visible in the front end webpage.

The code

This is a global Lync Client instance, defined in the page.

private LyncClient _lyncClient;

Here I am registering the LyncClient in the Page_Load event.

protected void Page_Load(object sender, EventArgs e)
{
    RegisterLyncClient();
}

I assign the LyncClient instance to the global _lyncClient. After that I register my event listener.

private void RegisterLyncClient()
{
    _lyncClient = LyncClient.GetClient();
    _lyncClient.StateChanged += HandleStateChanged;
}

This function is fired correctly as the Lync Client changes its state. Its visible during Debug mode.

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

The labels text is changed correctly (during debug mode). But the changes are not visible in frontend.

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

Assumption

If I use a button to manually change the status or if I use a timer to check and adjust the status every second, the changes are visible. So I assume the changes made within the HandleStateChanged event handler are not visible, because there is no postback after calling the SetLyncStatus function.

Question

Is it possible to force a postback from an event handler, that is not fired from a users action (e.g. user clicks a button)? It would be perfect, if its possible to call a partial refresh of the label or a defined section.

Any suggestions much appreciated. Thanks!

هل كانت مفيدة؟

المحلول

Before you try to implement any solution try to understand what runs on client what on server. Maybe you have a desktop development background and hence you also need to understand the stateless nature of web. Any changes happening on the server side would not reflect on client side and vice-versa. Once the server has responded to a request it would not automatically communicate status update to client. So a even driven approach would not work in your case. You need to do pings from client side to determine status changes. This pings can be done using AJAX with a predefined periodic interval.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top