Categories: Master Pages, CSS Posted by AlexanderZeitler on 9/20/2004 8:22 AM | Comments (0)
Milan Negovan hat einen durchaus interessanten CSS-basierten Ansatz für PageTemplates mit z.B. ASP.NET vorgestellt.

Currently rated 1.3 by 8 people

  • Currently 1.25/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: ASP.NET, Master Pages Posted by AlexanderZeitler on 9/3/2004 8:28 AM | Comments (1)

Philipp Sumi hat eine sehr gelungene Implementierung seiner MasterPages für ASP.NET 1.1 bei CodeProject vorgestellt.

Einen ausführlichen Test konnte ich aus Zeitmangel noch nicht durchführen, das Sample funktionierte aber auf Anhieb.

Auf den ersten Blick positiv fielen mir folgende Punkte auf:

  • Template und Content sind in Visual Studio.NET nach wie vor in der Design View editierbar
  • Der Content in den Seiten kann über das Visual Studio.NET Eigenschaftsfenster leicht den jeweiligen Bereichen in der Template zugewiesen werden.

Ich könnte mir durchaus vorstellen, meinem bisherigen Template-System untreu zu werden ;-)

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: Master Pages Posted by AlexanderZeitler on 3/12/2004 6:21 PM | Comments (0)

Durch ein Posting in der ASP.NET-Mailingliste bin ich auf ein weiteres Misfeature in den bereits häufiger angesprochenen Templates gestossen:

Will man in der CreateChilds-Methode Controls (z.B. Label) dynamisch hinzufügen:

protected override void CreateChildControls()
{
   // check if the name was set
   if((null == this.Title)||(""==this.Title))
      this.Title = "No Title";
   Label lbl = new Label();
   lbl.Text = "Hallo";
   this.Controls.Add(lbl);
   // insert the main content body if available
   if( null != this.Body )
   this.Body.InstantiateIn( bodycontainer );
}

so erhält man die folgende Parser-Fehlermeldung:

Die Steuerelementeauflistung kann nicht geändert werden, da das Steuerelement Codeblöcke enthält (z.B. <% ... %>).

Grund dafür ist folgender Tag in der Template.ascx:

<%=this.Title%>

Die Lösung besteht darin, diesen Tag durch folgende Zeile zu ersetzen:

<asp:Literal id="ltlTitle" runat="server" />

sowie in der CodeBehind folgenden Code einzufügen:

protected System.Web.UI.WebControls.Literal ltlTitle;

protected override void CreateChildControls()
{
   // check if the name was set
   if((null == this.Title)||(""==this.Title))
      this.Title = "No Title";
   ltlTitle.Text = this.Title; // dem Literal den Titel zuweisen
   Label lbl = new Label();
   lbl.Text = "Hallo";
   this.Controls.Add(lbl);
   // insert the main content body if available
   if( null != this.Body )
      this.Body.InstantiateIn( bodycontainer );
}

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: Master Pages Posted by AlexanderZeitler on 3/4/2004 7:44 PM | Comments (0)

Für die von mir im Januar vorgestellten Page Templates habe ich einen kleinen Bugfix in das Script CreateChildControls() implementiert, welches den PageTitle generiert.

Der Fehler liegt darin, daß das Script nur dann den Standard-Seiten-Title ausgibt, wenn das Title-Attribut nicht angegeben wird. Gibt man hingegen z.B.

<tsp:template id="mytemplate" runat="server" title="">

an, so arbeitet das Script nicht korrekt und gibt keinen Seiten-Title aus, was sich je nach Browser unterschiedlich darstellt.

Abhilfe schafft eine Erweiterung in der if-Abfrage, die einfach zusätzlich prüft, ob der string this.Title leer ist. Somit sieht das Script in der Template.ascx nun wie folgt aus:

protected override void CreateChildControls()
{
 // check if the name was set
 if((null == this.Title)||(""==this.Title))
  this.Title = "No Title";

 // insert the main content body if available
 if( null != this.Body )
  this.Body.InstantiateIn( bodycontainer );
}

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: Master Pages Posted by AlexanderZeitler on 1/22/2004 6:36 AM | Comments (0)

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);
}

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: Master Pages Posted by AlexanderZeitler on 1/21/2004 6:54 PM | Comments (0)

Spätestens wenn man mehr als 2 Seiten mit einheitlichem Layout erstellen will, sollte man sich mit Page Templates befassen. Damit man das Rad nicht neu erfinden muß, gibt es bereits etliche Artikel zu diesem Thema. Eine wirklich ausgereifte Lösung wird hier vorgestellt:

http://www.csharphelp.com/archives2/archive383.html

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5