ใช้แผงควบคุมหรือตัวยึดตำแหน่ง


152

ความแตกต่างระหว่าง<asp:Panel >และ<asp:PlaceHolder >ใน ASP.NET คืออะไร?

เมื่อใดที่คุณควรใช้อีกอันหนึ่ง?

คำตอบ:


161

พาเนลขยายเป็นขยาย (หรือ div) โดยมีเนื้อหาอยู่ภายใน ตัวยึดตำแหน่งเป็นเพียงตัวยึดตำแหน่งที่แทนที่ด้วยสิ่งที่คุณใส่ไว้


19
แผงกลายเป็น DIV
mbillard

4
มันสามารถกลายเป็น Span ได้เช่นกันขึ้นอยู่กับเวอร์ชันของ ASP.Net และเบราว์เซอร์ที่แสดงผลด้วย
สตีเว่นร็อบบินส์

9
ฉันไม่ได้เริ่มต้นกับ BrowserCaps - มันอาจกลายเป็นตารางเซลล์เดียวใน. Net 1.1 บนเบราว์เซอร์ "Downlevel"
Zhaph - Ben Duguid

6
หึผมพยายามที่จะบังคับตาราง downlevel แสดงผลออกมาจากใจของฉัน .. ขอบคุณสำหรับนำกลับขึ้น :-)
สตีเว่นร็อบบินส์

1
@Protectorone: ความคิดเห็นด้านบนเป็นเรื่องเกี่ยวกับพาเนลไม่ใช่ตัวยึด
Brian

63

ตัวยึดตำแหน่งไม่แสดงแท็กใด ๆ สำหรับตัวเองดังนั้นจึงเหมาะสำหรับการจัดกลุ่มเนื้อหาโดยไม่มีค่าใช้จ่ายของแท็ก HTML ด้านนอก

แผงควบคุมมีแท็ก HTML ด้านนอก แต่มีคุณสมบัติพิเศษที่ยอดเยี่ยม

  • BackImageUrl: รับ / กำหนด URL ของภาพพื้นหลังสำหรับพาเนล

  • HorizontalAlign: รับ / ตั้งค่าการ
    จัดตำแหน่งแนวนอนของเนื้อหาของพาเรนต์

  • Wrap: ได้รับ / ตั้งค่าว่า
    เนื้อหาของแผงจะแรปหรือไม่

มีบทความดีที่ startvbnet เป็นที่นี่


15
อีกคุณสมบัติที่ยอดเยี่ยมสำหรับ asp: Panel คือมันมีคุณสมบัติ DefaultButton โดยบอกว่าจะคลิกปุ่มใดหากผู้ใช้กดบนคีย์บอร์ดของพวกเขา มีประโยชน์ถ้าคุณมีพาเนลและปุ่มจำนวนมากในหน้าเดียวกันที่จำเป็นต้องทำงานกับปุ่ม Enter
Alex York

1
@ Marko หลังจากการต่อสู้กับการสืบทอดการควบคุมผู้ใช้ที่กำหนดเองฉันเห็นด้วย
drzaus

ในปี 2009 เมื่อ WebForms เป็น. NET โดยวิธีการทำ ASP.NET dev แล้วใช่ ในเดือนธันวาคม 2012 เกือบ 4 ปีต่อมาอาจไม่ ความคิดเห็นแปลก
Ray Booysen

1
ลิงก์ startvbnet นั้นตาย
mmcglynn

1
เช่นเดียวกับความคิดเห็นของฉันด้านบน - ขอบคุณสำหรับการให้รายละเอียดที่มีค่ามาก มันช่วยให้ชัดเจนว่าทำไมการใช้งานเหล่านี้ในโค้ดด้านหลังแทนที่จะเป็นโซลูชันอื่น ๆ สำหรับโมดูล DNN ที่ฉันพยายามอัพเกรด
user1585204

36

ควบคุมตำแหน่ง

ใช้ตัวควบคุม PlaceHolder เป็นคอนเทนเนอร์เพื่อจัดเก็บการควบคุมเซิร์ฟเวอร์ที่เพิ่มไว้ในเว็บเพจแบบไดนามิก ตัวควบคุม PlaceHolder จะไม่สร้างเอาต์พุตใด ๆ ที่มองเห็นได้และใช้เป็นภาชนะสำหรับการควบคุมอื่น ๆ บนเว็บเพจเท่านั้น คุณสามารถใช้Control.Controlsคอลเลกชันเพื่อเพิ่มแทรกหรือลบตัวควบคุมในตัวควบคุม PlaceHolder

แผงควบคุม

แผงควบคุมเป็นภาชนะสำหรับการควบคุมอื่นมันมีประโยชน์อย่างยิ่งเมื่อคุณต้องการสร้างการควบคุมโดยทางโปรแกรมซ่อน / แสดงกลุ่มการควบคุมหรือ จำกัด กลุ่มของการควบคุม

Directionคุณสมบัติเป็นประโยชน์สำหรับการแปลเนื้อหาแผงควบคุมเพื่อแสดงข้อความสำหรับภาษาที่เขียนจากขวาไปซ้ายเช่นภาษาอาหรับหรือภาษาฮิบรู

คอนโทรลพาเนลจัดเตรียมคุณสมบัติหลายอย่างที่อนุญาตให้คุณกำหนดลักษณะการทำงานและแสดงเนื้อหาของมันเอง ใช้BackImageUrคุณสมบัติ l เพื่อแสดงอิมเมจที่กำหนดเองสำหรับคอนโทรลพาเนล ใช้ScrollBarsคุณสมบัติเพื่อระบุแถบเลื่อนสำหรับตัวควบคุม

ความแตกต่างเล็กน้อยเมื่อแสดง HTML: ตัวควบคุม PlaceHolder จะไม่แสดงผลใด<div>

ข้อมูลเพิ่มเติมได้ที่ฟอรัม ASP.NET


1
นี่คือคำอธิบายโดยละเอียดที่ยอดเยี่ยม ฉันแค่ต้องการดูว่าทำไมใช้แท็กเหล่านี้ในที่ใด นักพัฒนาสำหรับโมดูล (ตอนนี้หายตัวไปอย่างลึกลับ :)) เพิ่งสร้างสิ่งเหล่านี้ในโค้ดด้านหลัง ฉันไม่เคยใช้มันมาก่อนเพราะเคยเป็นคนหน้าจาวาสคริปต์มาตลอด 7 ปีที่ผ่านมา ขอบคุณสำหรับการป้อนข้อมูลที่ยอดเยี่ยม
user1585204

5

ฉันผิดพลาด * ใน Visual Studio 2010 หากคุณวางตัวควบคุมไว้ในพื้นที่ที่สำรองไว้มันจะไม่แสดงผลในโหมดมุมมองออกแบบ

สิ่งนี้เป็นจริงสำหรับ Hidenfields และป้ายกำกับว่างเปล่า

ฉันชอบที่จะใช้ตัวยึดตำแหน่งแทนการติดตั้ง แต่ฉันเกลียดความจริงที่ว่าฉันไม่สามารถวางการควบคุมอื่น ๆ ไว้ในตัวยึดตำแหน่งในเวลาออกแบบใน GUI


5
คนยังคงใช้โหมดมุมมองออกแบบ? ;)
Matthew Lock

2
ฮ่าฮ่า - ฉันเลิกใช้ไปหลายปีแล้ว แต่ MS ก็ยังไม่ได้แก้ไขข้อผิดพลาด
George Filippakos

ยังรอการแก้ไขอยู่!
Nikki Punjabi

1

ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆ พาเนลจะสร้างเป็น<div>HTML ในขณะที่ตัวยึดตำแหน่งไม่ได้ แต่มีเหตุผลมากมายที่คุณสามารถเลือกได้

ทำไมถึงต้องเป็นผู้วาง

เนื่องจากมันไม่มีแท็กของตัวเองคุณจึงสามารถใช้มันอย่างปลอดภัยภายในองค์ประกอบอื่น ๆ ที่ไม่สามารถมี<div>ตัวอย่างเช่น:

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

นอกจากนี้คุณยังสามารถใช้ตัวยึดเพื่อควบคุมการมองเห็นของกลุ่มการควบคุมโดยไม่ต้องหุ้มมันใน <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>

ทำไมต้องเป็น Panel

มันสร้างเป็นของตัวเอง<div>และยังสามารถใช้เพื่อห่อกลุ่ม Contols แต่ Panel มีคุณสมบัติมากมายที่สามารถเป็นประโยชน์ในการจัดรูปแบบเนื้อหา:

<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กดภายในกล่องข้อความ ตอนนี้ผู้ใช้สามารถส่งแบบฟอร์มโดยไม่ต้องกดปุ่ม

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