패널 또는 PlaceHolder 사용


152

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

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

답변:


161

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


19
패널은 DIV가됩니다
mbillard 01/27/09

4
ASP.Net의 버전과 렌더링하는 브라우저에 따라 스팬이 될 수도 있습니다.
Steven Robbins

9
Meh, BrowserCaps를 시작하지 마십시오. "Downlevel"브라우저의 .Net 1.1에서 단일 셀 테이블이 될 수도 있습니다.
Zhaph-벤 Duguid

6
훗, 나는 :-) 그 백업을 가져 위해 .. 하위 테이블 내 마음의 렌더링 덕분에 강제로 시도
스티븐 로빈스에게

1
@Protectorone : 위의 설명은 자리 표시자가 아닌 패널에 대한 것입니다.
Brian

63

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

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

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

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

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

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


15
asp : Panel의 또 다른 멋진 기능은 DefaultButton 속성이있어 사용자가 키보드에서 Enter 키를 누르면 클릭 할 버튼을 알려줍니다. 동일한 페이지에 여러 개의 패널과 버튼이 있고 Enter 버튼으로 작동해야하는 경우 편리합니다.
Alex York

1
@Marko는 커스텀 사용자 컨트롤 상속으로 씨름 한 후 동의합니다
drzaus

2009 년 WebForms가 ASP.NET 개발을 수행하는 사실상의 .NET 방식이었을 때, 그렇습니다. 2012 년 12 월에 거의 4 년 후에는 그렇지 않을 것입니다. 이상한 의견
Ray Booysen

1
startvbnet 연결이 끊어졌습니다.
mmcglynn

1
위의 의견과 동일합니다. 매우 귀중한 정보를 제공해 주셔서 감사합니다. 업그레이드하려는 DNN 모듈에 대한 다른 솔루션 대신 코드 뒤에 사용 된 이유를 정리하는 데 도움이되었습니다.
user1585204

36

PlaceHolder 컨트롤

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

패널 컨트롤

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

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

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

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

ASP.NET 포럼 에서 추가 정보


1
이것은 훌륭한 자세한 설명입니다. 나는 왜이 태그들이 어디에 사용되었는지를 알 필요가있었습니다. 모듈 개발자 (현재 신비롭게 사라졌습니다 :))는 코드 뒤에 동적으로 생성되었습니다. 지난 7 년 동안 자바 스크립트 프론트 엔드를 사용해 본 적이 있습니다. 큰 도움을 주셔서 감사합니다.
user1585204

5

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

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

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


5
사람들은 여전히 ​​디자인 뷰 모드를 사용합니까? ;)
Matthew Lock

2
haha-

여전히이 문제가 해결되기를 기다리고 있습니다!
Nikki Punjabi

1

다른 답변에서 언급했듯이 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.