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.