[asp.net] 패널 또는 PlaceHolder 사용

ASP.NET <asp:Panel >과 차이점은 무엇입니까 <asp:PlaceHolder >?

언제 다른 것을 사용해야합니까?



답변

패널은 내용이 포함 된 범위 (또는 div)로 확장됩니다. 자리 표시자는 바로 그 자리 표시 자입니다. 자리 표시자는 자리 표시 자로 대체됩니다.


답변

자리 표시자는 자체적으로 태그를 렌더링하지 않으므로 외부 HTML 태그의 오버 헤드없이 콘텐츠를 그룹화하는 데 좋습니다.

패널에는 외부 HTML 태그가 있지만 멋진 추가 속성이 있습니다.

  • BackImageUrl : 패널의 배경 이미지 URL을 가져 오거나 설정합니다

  • HorizontalAlign :
    부모 내용 의 가로 정렬을 가져 오거나 설정합니다

  • 줄 바꿈 :
    패널의 내용 줄 바꿈을 가져 오거나 설정합니다.

startvbnet에 좋은 기사가 있습니다 .


답변

PlaceHolder 컨트롤

PlaceHolder 컨트롤을 컨테이너로 사용하여 웹 페이지에 동적으로 추가되는 서버 컨트롤을 저장합니다. PlaceHolder 컨트롤은 가시적 인 출력을 생성하지 않으며 웹 페이지의 다른 컨트롤에 대한 컨테이너로만 사용됩니다. Control.Controls컬렉션을 사용 하여 PlaceHolder 컨트롤에서 컨트롤을 추가, 삽입 또는 제거 할 수 있습니다 .

패널 컨트롤

패널 컨트롤은 다른 컨트롤의 컨테이너입니다 . 프로그래밍 방식으로 컨트롤을 생성하거나, 컨트롤 그룹을 숨기거나 표시하거나, 컨트롤 그룹을 현지화 할 때 특히 유용합니다.

Direction속성은 아랍어 또는 히브리어와 같이 오른쪽에서 왼쪽으로 쓰는 언어의 텍스트를 표시하도록 패널 컨트롤의 내용을 현지화하는 데 유용합니다.

Panel 컨트롤은 내용의 동작과 표시를 사용자 지정할 수있는 몇 가지 속성을 제공합니다. BackImageUrl 속성을 사용하여 Panel 컨트롤에 대한 사용자 지정 이미지를 표시하십시오. 이 ScrollBars속성을 사용하여 컨트롤의 스크롤 막대를 지정 하십시오 .

HTML 렌더링시 작은 차이 : PlaceHolder 컨트롤은 아무것도 렌더링하지 않지만 Panel 컨트롤은으로 렌더링합니다 <div>.

ASP.NET 포럼 에서 추가 정보


답변

Visual Studio 2010에서 이상한 버그 *, 자리 표시 자 안에 컨트롤을 넣으면 디자인 뷰 모드에서 렌더링되지 않습니다.

이것은 Hidenfields 및 Empty 레이블에 특히 해당됩니다.

패널 대신 자리 표시자를 사용하고 싶지만 GUI에서 디자인 타임에 자리 표시 자 안에 다른 컨트롤을 넣을 수 없다는 사실이 싫습니다.


답변

다른 답변에서 언급했듯이 Panel <div>은 HTML로 생성 하지만 PlaceHolder는 생성 하지 않습니다. 그러나 둘 중 하나를 선택할 수있는 더 많은 이유가 있습니다.

왜 PlaceHolder인가?

자체 태그를 생성하지 않으므로을 포함 할 수없는 다른 요소 내에서 안전하게 사용할 수 있습니다 ( <div>예 :

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

PlaceHolder를 사용하여 컨트롤 그룹을 래핑하지 않고 컨트롤 그룹의 가시성을 제어 할 수도 있습니다. <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>

왜 패널

자체 생성 <div>되며 Contols 그룹을 감싸는 데 사용할 수도 있습니다. 그러나 패널에는 내용의 형식을 지정하는 데 유용한 훨씬 더 많은 속성이 있습니다.

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

그러나 가장 유용한 기능은 DefaultButton속성입니다. ID가 패널의 버튼과 일치 enter하면 TextBox 내부에서을 누르면 유효성 검사와 함께 양식 게시물이 트리거됩니다 . 이제 사용자는 버튼을 누르지 않고도 양식을 제출할 수 있습니다.

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

enter내부 를 눌러 위의 스 니펫을 사용해보십시오.TextBox1


답변