2012-03-25 3 views
1

Was setzen ist der Unterschied in dies zu tun:Difference beetwen Eigenschaften Element zuweisen oder es direkt in Markup

<a href="<%=this.GetUserProfilePermalink()%>"><%=this.GetUsername()%></a> 

und diese:

<a id="hlUser" runat="server"></a> 

in Code-Behind:

hlUser.HRef = GetUserProfilePermalink(); 

hlUser.InnerText = GetUsername(); 

Ich habe bemerkt, dass mein Codebehind besser lesbar ist, wenn ich es zuerst mache, weil ich alle Assisting zu Markup verschoben habe, wenn ich irgendwo etwas vermisse Es ist schwer, Fehler aufgrund von "zu vielen Zeichen im Literal" -Fehler zu finden. Was ist der Unterschied und was ist der beste Weg, dies zu tun?

Antwort

0

Mit der zweiten Möglichkeit erstellen Sie ein Hyperlink-Objekt auf dem Server, legen einige Eigenschaften fest und verwenden dann das Objekt, wenn die Seite im Rendering-Status ist, um den Hyperlink in HTML zu rendern.

Bei der ersten Möglichkeit geben Sie einfach Zeichenfolgen mit dem Response-Objekt aus, auf dem Server wurde kein Hyperlink-Objekt erstellt.

Auch wenn die erste Methode normalerweise leichter ist, hat die zweite Methode viele Vorteile. Da Sie zum Beispiel ein Objekt auf dem Server haben, das selbst rendert, kann es erkennen, welcher Browser es gerade rendert, und verschiedene Rendertechniken für verschiedene Browser verwenden, so dass es überall funktioniert.

+0

Vielen Dank für die Antwort, können Sie erklären "..und verschiedene Rendertechniken für verschiedene Browser verwenden, so dass es überall funktioniert." Ich verstehe nicht ganz, was du meinst. – formatc

1

Einer der Unterschiede ist in der Viewstate Nutzung:

Ihre .GetUserProfilePermalink Unter der Annahme() ist ein kostspieliger Vorgang, mit dem ersten Verfahren, Sie haben es auf jedem Postback laufen.

Mit der zweiten Methode und einem aktiven Viewstate können Sie .GetUserProfilePermalink() nur einmal ausführen und der Wert wird im Viewstate gespeichert (zu Kosten in Bandbreite) und bei jedem Postback angezeigt.

Außerdem wird der Code im Markup während der Projektkompilierung nicht überprüft. Auf lange Sicht ist es ein Problem für Code-Refactoring.

Verwandte Themen