Sự khác biệt giữa <asp:Panel >
và <asp:PlaceHolder >
trong ASP.NET là gì?
Khi nào bạn nên sử dụng cái này hơn cái kia?
Sự khác biệt giữa <asp:Panel >
và <asp:PlaceHolder >
trong ASP.NET là gì?
Khi nào bạn nên sử dụng cái này hơn cái kia?
Câu trả lời:
Một bảng điều khiển mở rộng đến một khoảng (hoặc một div), với nội dung của nó trong đó. Một trình giữ chỗ chỉ là như vậy, một trình giữ chỗ được thay thế bằng bất cứ thứ gì bạn đặt trong đó.
Trình giữ chỗ không hiển thị bất kỳ thẻ nào cho chính nó, vì vậy thật tuyệt vời khi nhóm nội dung mà không cần các thẻ HTML bên ngoài.
Bảng điều khiển có các thẻ HTML bên ngoài nhưng có một số thuộc tính bổ sung thú vị.
BackImageUrl: Gets / Đặt URL của hình nền cho bảng điều khiển
Ngang ngang: Nhận / Đặt
căn chỉnh ngang của nội dung của cha mẹ
Có một bài viết hay tại startvbnet ở đây .
Sử dụng điều khiển PlaceHolder làm bộ chứa để lưu trữ các điều khiển máy chủ được thêm động vào trang Web. Điều khiển PlaceHolder không tạo ra bất kỳ đầu ra có thể nhìn thấy nào và chỉ được sử dụng làm vùng chứa cho các điều khiển khác trên trang Web. Bạn có thể sử dụng Control.Controls
bộ sưu tập để thêm, chèn hoặc xóa điều khiển trong điều khiển PlaceHolder.
Điều khiển bảng điều khiển là một thùng chứa cho các điều khiển khác . Nó đặc biệt hữu ích khi bạn muốn tạo các điều khiển theo chương trình, ẩn / hiển thị một nhóm các điều khiển hoặc bản địa hóa một nhóm các điều khiển.
Các Direction
bất động sản có ích cho bản địa hóa nội dung kiểm soát của Ban Hội thẩm để hiển thị văn bản cho các ngôn ngữ được viết từ phải sang trái, chẳng hạn như tiếng Ả Rập hay tiếng Hebrew.
Điều khiển Bảng điều khiển cung cấp một số thuộc tính cho phép bạn tùy chỉnh hành vi và hiển thị nội dung của nó. Sử dụng thuộc tính BackImageUr
l để hiển thị hình ảnh tùy chỉnh cho điều khiển Bảng điều khiển. Sử dụng thuộc ScrollBars
tính để chỉ định thanh cuộn cho điều khiển.
Sự khác biệt nhỏ khi kết xuất HTML: điều khiển PlaceHolder sẽ không hiển thị gì, nhưng điều khiển Bảng điều khiển sẽ hiển thị dưới dạng <div>
.
Thêm thông tin tại Diễn đàn ASP.NET
Tôi gặp lỗi * trong visual studio 2010, nếu bạn đặt các điều khiển bên trong Placeholder thì nó không hiển thị chúng ở chế độ xem thiết kế.
Điều này đặc biệt đúng với nhãn Hidenfields và rỗng.
Tôi rất thích sử dụng trình giữ chỗ thay vì bảng điều khiển nhưng tôi ghét thực tế là tôi không thể đặt các điều khiển khác bên trong trình giữ chỗ tại thời điểm thiết kế trong GUI.
Như đã đề cập trong các câu trả lời khác, Bảng điều khiển tạo ra một <div>
HTML, trong khi PlaceHolder thì không. Nhưng có rất nhiều lý do tại sao bạn có thể chọn một trong hai.
Tại sao một PlaceHolder?
Vì nó không tạo ra thẻ của riêng bạn, bạn có thể sử dụng nó một cách an toàn bên trong phần tử khác không thể chứa a <div>
, ví dụ:
<table>
<tr>
<td>Row 1</td>
</tr>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>
Bạn cũng có thể sử dụng PlaceHolder để kiểm soát Tầm nhìn của một nhóm Điều khiển mà không cần bọc nó trong <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>
Tại sao một bảng điều khiển
Nó tạo ra nó <div>
và cũng có thể được sử dụng để bọc một nhóm các Contols. Nhưng một Bảng điều khiển có nhiều thuộc tính hơn có thể hữu ích để định dạng nội dung của nó:
<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>
Nhưng tính năng hữu ích nhất là DefaultButton
tài sản. Khi ID khớp với Nút trong Bảng điều khiển, nó sẽ kích hoạt Bài đăng mẫu có xác thực khi enter
được nhấn bên trong TextBox. Bây giờ người dùng có thể gửi Biểu mẫu mà không cần nhấn Nút.
<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>
Hãy thử đoạn trích trên bằng cách nhấn enter
vào bên trongTextBox1