Verwenden von Panel oder PlaceHolder

152

Was ist der Unterschied zwischen <asp:Panel >und <asp:PlaceHolder >in ASP.NET?

Wann sollten Sie eine über die andere verwenden?

p.campbell
quelle

Antworten:

161

Ein Panel wird zu einem Bereich (oder einem Div) erweitert, in dem sich der Inhalt befindet. Ein Platzhalter ist genau das, ein Platzhalter, der durch alles ersetzt wird, was Sie eingeben.

Steven Robbins
quelle
19
Ein Panel wird ein DIV
mbillard
4
Abhängig von der Version von ASP.Net und dem Browser, den es rendert, kann es auch zu einem Span werden.
Steven Robbins
9
Meh, lass mich nicht mit BrowserCaps anfangen - es kann auch eine Einzelzellentabelle in .Net 1.1 in "Downlevel" -Browsern werden.
Zhaph - Ben Duguid
6
Heh, ich habe versucht, das Rendern von Tabellen auf niedriger Ebene aus meinem Kopf zu verdrängen. Danke, dass du das wieder aufgegriffen hast :-)
Steven Robbins
1
@Protectorone: Die obigen Kommentare beziehen sich auf Panels, nicht auf Platzhalter.
Brian
63

Der Platzhalter rendert keine Tags für sich selbst. Daher eignet er sich hervorragend zum Gruppieren von Inhalten ohne den Aufwand für äußere HTML-Tags.

Das Panel hat äußere HTML-Tags, aber einige coole zusätzliche Eigenschaften.

  • BackImageUrl: Ruft die URL des Hintergrundbilds für das Bedienfeld ab / legt diese fest

  • HorizontalAlign: Ruft die
    horizontale Ausrichtung des Inhalts des übergeordneten Elements ab bzw. legt diese fest

  • Wrap: Ruft ab / legt fest, ob der
    Inhalt des Panels umbrochen wird

Es gibt einen guten Artikel bei startvbnet hier .

Ray Booysen
quelle
15
Eine weitere coole Funktion eines asp: Panels ist, dass es eine DefaultButton-Eigenschaft hat, die angibt, auf welche Schaltfläche geklickt werden soll, wenn der Benutzer die Eingabetaste auf seiner Tastatur drückt. Praktisch, wenn Sie mehrere Bedienfelder und Schaltflächen auf derselben Seite haben, die mit der Eingabetaste arbeiten müssen.
Alex York
1
@ Marko nach dem Ringen mit benutzerdefinierter Benutzersteuerung Vererbung, stimme ich zu
drzaus
Im Jahr 2009, als WebForms de facto die .NET-Methode für ASP.NET-Entwickler war, dann ja. Im Dezember 2012, fast 4 Jahre später wahrscheinlich nicht.
Ray Booysen
1
startvbnet link ist tot.
mmcglynn
1
Wie meine obigen Kommentare - danke, dass Sie sehr wertvolle Details geliefert haben. Es half zu klären, warum diese im Code-Behind anstelle anderer Lösungen für ein DNN-Modul verwendet wurden, das ich aktualisieren möchte.
user1585204
36

PlaceHolder-Steuerung

Verwenden Sie das PlaceHolder-Steuerelement als Container, um Serversteuerelemente zu speichern, die der Webseite dynamisch hinzugefügt werden. Das PlaceHolder-Steuerelement erzeugt keine sichtbare Ausgabe und wird nur als Container für andere Steuerelemente auf der Webseite verwendet. Mit der Control.ControlsAuflistung können Sie ein Steuerelement im PlaceHolder-Steuerelement hinzufügen, einfügen oder entfernen.

Bedienfeldsteuerung

Das Panel-Steuerelement ist ein Container für andere Steuerelemente . Dies ist besonders nützlich, wenn Sie Steuerelemente programmgesteuert generieren, eine Gruppe von Steuerelementen ausblenden / anzeigen oder eine Gruppe von Steuerelementen lokalisieren möchten.

Die DirectionEigenschaft ist nützlich, um den Inhalt eines Panel-Steuerelements zu lokalisieren und Text für Sprachen anzuzeigen, die von rechts nach links geschrieben sind, z. B. Arabisch oder Hebräisch.

Das Panel-Steuerelement bietet verschiedene Eigenschaften, mit denen Sie das Verhalten und die Anzeige des Inhalts anpassen können. Verwenden Sie die BackImageUrEigenschaft l, um ein benutzerdefiniertes Bild für das Bedienfeld anzuzeigen. Verwenden Sie die ScrollBarsEigenschaft, um Bildlaufleisten für das Steuerelement anzugeben.

Kleine Unterschiede beim Rendern von HTML: Ein PlaceHolder-Steuerelement rendert nichts, das Panel-Steuerelement jedoch als <div>.

Weitere Informationen finden Sie in den ASP.NET-Foren

ecleel
quelle
1
Dies ist eine ausgezeichnete detaillierte Erklärung. Ich musste nur sehen, warum diese Tags wo verwendet wurden. Der Entwickler für ein Modul (jetzt auf mysteriöse Weise verschwunden :)) hat diese nur dynamisch im Code dahinter erstellt. Ich habe sie noch nie benutzt, da ich in den letzten 7 Jahren ein JavaScript-Frontend-Typ war. Danke für den tollen Input.
user1585204
5

Ich habe einen seltsamen Fehler * in Visual Studio 2010, wenn Sie Steuerelemente in einen Platzhalter einfügen, werden diese nicht im Entwurfsansichtsmodus gerendert.

Dies gilt insbesondere für Hidenfields und Empty Labels.

Ich würde gerne Platzhalter anstelle von Bedienfeldern verwenden, aber ich hasse die Tatsache, dass ich zur Entwurfszeit in der GUI keine anderen Steuerelemente in Platzhalter einfügen kann.

George Filippakos
quelle
5
Die Leute benutzen immer noch den Design View-Modus? ;)
Matthew Lock
2
haha - ich habe es vor Jahren aufgegeben, aber MS hat den Fehler immer noch nicht
behoben
Ich warte immer noch darauf, dass das behoben wird!
Nikki Punjabi
1

Wie in anderen Antworten erwähnt, generiert das Panel eine <div>in HTML, während der PlaceHolder dies nicht tut. Aber es gibt noch viel mehr Gründe, warum Sie sich für einen entscheiden könnten.

Warum ein PlaceHolder?

Da es kein eigenes Tag generiert, können Sie es sicher in einem anderen Element verwenden, das kein enthalten kann <div>, zum Beispiel:

<table>
    <tr>
        <td>Row 1</td>
    </tr>
    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>

Sie können auch einen PlaceHolder verwenden, um die Sichtbarkeit einer Gruppe von Steuerelementen zu steuern, ohne sie in a zu verpacken <div>

<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <br />
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:PlaceHolder>

Warum ein Panel

Es generiert seine eigenen <div>und kann auch zum Umschließen einer Gruppe von Steuerelementen verwendet werden. Ein Panel verfügt jedoch über viel mehr Eigenschaften, die zum Formatieren des Inhalts hilfreich sein können:

<asp:Panel ID="Panel1" runat="server" Font-Bold="true"
    BackColor="Green" ForeColor="Red" Width="200"
    Height="200" BorderColor="Black" BorderStyle="Dotted">
    Red text on a green background with a black dotted border.
</asp:Panel>

Das nützlichste Merkmal ist jedoch die DefaultButtonEigenschaft. Wenn die ID mit entereiner Schaltfläche im Bedienfeld übereinstimmt, wird ein Formularbeitrag mit Validierung ausgelöst, wenn in einer Textbox gedrückt wird. Jetzt kann ein Benutzer das Formular senden, ohne die Taste zu drücken.

<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <br />
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
        ErrorMessage="Input is required" ValidationGroup="myValGroup"
        Display="Dynamic" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
    <br />
    <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="myValGroup" />
</asp:Panel>

Probieren Sie das obige Snippet aus, indem Sie nach enterinnen drückenTextBox1

VDWWD
quelle