Bug in ASP.NET 1.1 -> Problem mit Page Templates

Written on January 22, 2004

Das gestern von mir vorgestellte PageTemplate-System für ASP.NET funktioniert problemlos - solange man keine PostBacks benötigt, d.h. nicht sehr lange.

Bei PostBacks erhält man einen JavaScript-Error, der aus einem Bug in ASP.NET 1.1 rührt. Der Bug äußert sich darin, daß im PostBack-Konstrukt anstelle des üblichen "_" als Trennzeichen ein ":" eingesetzt wird.

Microsoft stellt für diesen Bug einen Fix bereit, den man allerdings explizit anfordern muß. Entwickelt man Seiten für Server, bei denen man die Installation dieses Patches nicht voraussetzen kann, sollte man besser mit einem Workaround in der Template.ascx.cs arbeiten, welches die Render-Methode der Template überschreibt und den ":" durch den "_" ersetzt.

Genug der Theorie - hier ist der Code:

protected override void Render(HtmlTextWriter writer)
{
StringBuilder stringBuilder = new StringBuilder();
StringWriter stringWriter = new StringWriter(stringBuilder);
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
string html = stringBuilder.ToString();

int start = html.IndexOf("<form name=\"") + 12;
int end = html.IndexOf("\"", start);
string formID = html.Substring(start, end - start);
string replace = formID.Replace(":", "_");
html = html.Replace("document." + formID, "document." + replace);
writer.Write(html);
}