Michael Hofer

Michael Hofer
14.10.2009
0 Kommentar(e)

Um Seiten nicht immer ganz neu laden zu müssen werden in ASP.NET und somit auch SharePoint vermehrt die in ASP.NET 3.5 enthaltenen UpdatePanel verwendet. Diese können aber unter Umständen Nebeneffekte verursachen: Der Seiten-Titel kann nach einem asynchronen Postback plötzlich verschwinden oder komische Zeichen darstellen. Dieser Post zeigt, wie dies mit einem Workaround behoben werden kann.

Das System.Web.UI.UpdatePanel, in ASP.NET 3.5 aus dem Assembly System.Web.Extensions stammend, ist eine der Grundkomponenten, wenn man von AJAX-Funktionalitäten spricht: Es erlaubt einem, dass Informationen an den Server gesendet werden und ein (Teil-)Bereich der Seite aktualisiert wird, ohne dass die komplette Seite neu geladen werden muss. Im Hintergrund sorgen komplexe JavaScripts für diese Funktion, der Entwickler muss sich aber um das alles nicht kümmern.

Allerdings kann das UpdatePanel auch unerwartete Nebenwirkungen haben. Eine davon ist, dass der Seitentitel im Browser-Fenster oder im Browser-Tab plötzlich verschwindet oder komische Zeichen anzeigt. Aus irgendeinem mir unbekannten Grund wird im Rahmen der Verarbeitung des asynchronen Request an den Server auch der Seitentitel verändert und mit einem Zeilenumbruch am Anfang "ergänzt", was zu den "komischen" Zeichen und dem Verwschwinden des Seitentitels führt.

Warum dies genau passiert kann ich nicht sage, aber andere haben dieses Problem auch schon dokumentiert: Hier, hier und hier. Die dort dokumentierten Lösungsansätze finde ich allerdings nicht sehr befriedigend, darum habe ich eine andere Lösung entwickelt.

Da ich mich in einer SharePoint Veröffentlichungsseite bewege, habe ich untenstehenden Code in meine MasterPage eingefügt (wie das geht steht hier):

protected override void OnPreRender(EventArgs e) {
   string script = @"
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(FQ_AsyncBeginRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(FQ_AsyncEndRequest);";

  ClientScript.RegisterClientScriptBlock(typeof(FQPage), "FQPageScripts", script, true);
}

Ich hänge mit damit in die vom PageRequestManager client-seitig ausgelösten Ereignisse vor respektive nach einem asynchronen Request ein. Alles, was ich nun noch machen muss, ist auf meiner MasterPage auf ein JavaScript-File zu verlinken, welches folgenden Code ausführt:

var FQ_OrigPageTitle; // Used to store the original page title before an asynchronous postback

 

// Called before an asynchronous (Updatepanel) postback is executed.

function FQ_AsyncBeginRequest(sender, args) {

    FQ_OrigPageTitle = document.title;

}

 

// Called after an asynchronous (Updatepanel) postback is executed.

function FQ_AsyncEndRequest(sender, args) {

    document.title = FQ_OrigPageTitle;
}

Der Code ist ziemlich selbsterklärend: Bevor der asynchrone Request ausgeführt wird schreibe ich den aktuellen Seitentitel in eine Variable, nachdem der Request beendet ist setzte ich den Titel wieder wie gehabt.
 

Blog-Archiv

Juli 2014 (7)
Juni 2014 (2)
Mai 2014 (2)


Das könnte Sie auch interessieren:
Offene Stellen

Kommentar hinterlassen




= six - eight

Kommentar(e)

Noch keine Kommentare.