Jaka jest różnica między <asp:Panel >
i <asp:PlaceHolder >
w ASP.NET?
Kiedy należy używać jednego nad drugim?
Jaka jest różnica między <asp:Panel >
i <asp:PlaceHolder >
w ASP.NET?
Kiedy należy używać jednego nad drugim?
Odpowiedzi:
Panel rozwija się do zakresu (lub elementu div) z zawartością w nim. Symbol zastępczy to po prostu symbol zastępczy, który jest zastępowany przez wszystko, co w nim wstawisz.
Element zastępczy nie renderuje żadnych tagów dla siebie, więc świetnie nadaje się do grupowania treści bez narzutu zewnętrznych znaczników HTML.
Panel ma zewnętrzne tagi HTML, ale ma kilka fajnych dodatkowych właściwości.
BackImageUrl: Pobiera / ustawia adres URL obrazu tła dla panelu
HorizontalAlign: Pobiera / ustawia
wyrównanie w poziomie zawartości elementu nadrzędnego
Jest dobry artykuł na startvbnet tutaj .
Użyj kontrolki PlaceHolder jako kontenera do przechowywania formantów serwera, które są dynamicznie dodawane do strony sieci Web. Formant PlaceHolder nie generuje żadnych widocznych danych wyjściowych i jest używany tylko jako kontener dla innych formantów na stronie sieci Web. Możesz użyć Control.Controls
kolekcji, aby dodać, wstawić lub usunąć kontrolkę w kontrolce PlaceHolder.
Kontrolka panelu jest kontenerem dla innych kontrolek . Jest to szczególnie przydatne, gdy chcesz programowo generować formanty, ukryć / pokazać grupę kontrolek lub zlokalizować grupę kontrolek.
Direction
Właściwość jest przydatna do lokalizowania zawartości kontrolki na panelu do wyświetlania tekstu w językach, które są pisane od prawej do lewej, takich jak arabski lub hebrajski.
Formant Panel zapewnia kilka właściwości, które umożliwiają dostosowanie zachowania i wyświetlania jego zawartości. Użyj BackImageUr
właściwości l, aby wyświetlić niestandardowy obraz dla kontrolki Panel. Użyj ScrollBars
właściwości, aby określić paski przewijania dla kontrolki.
Małe różnice podczas renderowania HTML: kontrolka PlaceHolder nie będzie renderować niczego, ale kontrolka Panel będzie renderować jako plik <div>
.
Więcej informacji na forach ASP.NET
Mam dziwny błąd * w Visual Studio 2010, jeśli umieścisz kontrolki wewnątrz obiektu zastępczego, nie wyrenderuje ich w trybie widoku projektu.
Dotyczy to zwłaszcza etykiet Hidenfields i Empty.
Chciałbym używać symboli zastępczych zamiast paneli, ale nienawidzę faktu, że nie mogę umieszczać innych elementów sterujących w elementach zastępczych w czasie projektowania w interfejsie GUI.
Jak wspomniano w innych odpowiedziach, Panel generuje <div>
w HTML, podczas gdy PlaceHolder nie. Ale jest o wiele więcej powodów, dla których możesz wybrać jeden z nich.
Dlaczego PlaceHolder?
Ponieważ nie generuje własnego tagu, możesz go bezpiecznie używać wewnątrz innego elementu, który nie może zawierać znaku <div>
, na przykład:
<table>
<tr>
<td>Row 1</td>
</tr>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>
Możesz również użyć elementu PlaceHolder, aby kontrolować widoczność grupy formantów bez zawijania go w plik <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>
Dlaczego panel
Generuje własne <div>
i może być również używany do pakowania grupy Contoli. Ale panel ma znacznie więcej właściwości, które mogą być przydatne do formatowania jego zawartości:
<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>
Ale najbardziej użyteczną funkcją jest DefaultButton
właściwość. Gdy identyfikator pasuje do przycisku w panelu, po enter
naciśnięciu przycisku wewnątrz pola tekstowego zostanie wywołany formularz z potwierdzeniem. Teraz użytkownik może przesłać formularz bez naciskania przycisku.
<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>
Wypróbuj powyższy fragment, naciskając enter
wewnątrzTextBox1