Utilizzando Panel o PlaceHolder


152

Qual è la differenza tra <asp:Panel >e <asp:PlaceHolder >in ASP.NET?

Quando dovresti usarne uno sopra l'altro?

Risposte:


161

Un pannello si espande in un intervallo (o div), con il suo contenuto al suo interno. Un segnaposto è proprio questo, un segnaposto che viene sostituito da qualsiasi cosa tu ci abbia inserito.


19
Un pannello diventa un DIV
mbillard il

4
Può diventare anche uno Span, a seconda della versione di ASP.Net e del browser che sta visualizzando.
Steven Robbins,

9
Meh, non farmi iniziare con BrowserCaps - può anche diventare una tabella a cella singola in .Net 1.1 su browser "Downlevel".
Zhaph - Ben Duguid,

6
Heh, ho provato a forzare il rendering del tavolo di livello inferiore fuori dalla mia mente .. grazie per avermene fatto il backup :-)
Steven Robbins,

1
@Protectorone: i commenti sopra riguardano i pannelli, non i segnaposto.
Brian,

63

Il segnaposto non esegue il rendering di tag per se stesso, quindi è ottimo per raggruppare il contenuto senza l'overhead dei tag HTML esterni.

Il pannello ha tag HTML esterni ma ha alcune interessanti proprietà extra.

  • BackImageUrl: ottiene / imposta l'URL dell'immagine di sfondo per il pannello

  • HorizontalAlign: Ottiene / Imposta l'
    allineamento orizzontale del contenuto del genitore

  • A capo: ottiene / imposta se il
    contenuto del pannello viene a capo

C'è un buon articolo su startvbnet qui .


15
Un'altra caratteristica interessante di un asp: Panel è che ha una proprietà DefaultButton, che gli dice quale pulsante fare clic se l'utente preme invio sulla tastiera. Utile se nella stessa pagina sono presenti più pannelli e pulsanti che devono funzionare con il pulsante Invio.
Alex York,

1
@Marko dopo aver lottato con l'eredità del controllo utente personalizzato, sono d'accordo
drzaus,

Nel 2009, quando WebForms era di fatto il modo .NET di fare sviluppo ASP.NET, allora sì. Nel dicembre 2012, quasi 4 anni dopo probabilmente no. Strano commento
Ray Booysen,

1
Il link startvbnet è morto.
mmcglynn,

1
Come i miei commenti sopra - grazie per aver fornito dettagli di grande valore. Ha aiutato a chiarire il motivo per cui questi venivano utilizzati nel codice dietro invece di altre soluzioni per un modulo DNN che sto cercando di aggiornare.
user1585204

36

Controllo PlaceHolder

Utilizzare il controllo PlaceHolder come contenitore per archiviare i controlli server aggiunti dinamicamente alla pagina Web. Il controllo PlaceHolder non produce alcun output visibile e viene utilizzato solo come contenitore per altri controlli nella pagina Web. È possibile utilizzare la Control.Controlsraccolta per aggiungere, inserire o rimuovere un controllo nel controllo PlaceHolder.

Pannello di controllo

Il pannello di controllo è un contenitore per altri controlli . È particolarmente utile quando si desidera generare controlli a livello di codice, nascondere / mostrare un gruppo di controlli o localizzare un gruppo di controlli.

La Directionproprietà è utile per localizzare il contenuto di un controllo Panel per visualizzare il testo per le lingue scritte da destra a sinistra, come l'arabo o l'ebraico.

Il controllo del pannello fornisce diverse proprietà che consentono di personalizzare il comportamento e la visualizzazione dei suoi contenuti. Utilizzare la BackImageUrproprietà l per visualizzare un'immagine personalizzata per il controllo Panel. Utilizzare la ScrollBarsproprietà per specificare le barre di scorrimento per il controllo.

Piccole differenze durante il rendering HTML: un controllo PlaceHolder non renderà nulla, ma il controllo Panel verrà visualizzato come <div>.

Maggiori informazioni sui forum ASP.NET


1
Questa è un'ottima spiegazione dettagliata. Dovevo solo vedere perché questi tag venivano usati dove. lo sviluppatore di un modulo (ora misteriosamente scomparso :)) ha appena creato questi dinamicamente nel codice dietro. Non li avevo mai usati prima, essendo stato un ragazzo front-end JavaScript negli ultimi 7 anni circa. Grazie per l'ottimo contributo.
user1585204

5

I bizzarro bug * in Visual Studio 2010, se si inseriscono i controlli in un segnaposto, questi non li rendono in modalità visualizzazione struttura.

Ciò è particolarmente vero per le etichette Hidenfields e Empty.

Mi piacerebbe usare i segnaposto anziché i pannelli, ma odio il fatto di non poter inserire altri controlli all'interno dei segnaposto in fase di progettazione nella GUI.


5
Le persone usano ancora la modalità di visualizzazione design? ;)
Matthew Lock

2
haha - ho
smesso di

Aspetto ancora che questo venga risolto!
Nikki Punjabi,

1

Come menzionato in altre risposte, il Pannello genera un <div>in HTML, mentre PlaceHolder no. Ma ci sono molte altre ragioni per cui puoi scegliere una delle due.

Perché un PlaceHolder?

Poiché non genera tag propri, è possibile utilizzarlo in modo sicuro all'interno di altri elementi che non possono contenere un <div>, ad esempio:

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

Puoi anche utilizzare un PlaceHolder per controllare la visibilità di un gruppo di controlli senza racchiuderlo in a <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>

Perché un pannello

Genera il proprio <div>e può anche essere usato per avvolgere un gruppo di controlli. Ma un pannello ha molte più proprietà che possono essere utili per formattare il suo contenuto:

<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>

Ma la caratteristica più utile è la DefaultButtonproprietà. Quando l'ID corrisponde a un pulsante nel pannello, attiverà un post modulo con convalida quando enterviene premuto all'interno di una casella di testo. Ora un utente può inviare il modulo senza premere il pulsante.

<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>

Prova lo snippet sopra premendo enterall'internoTextBox1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.