Sử dụng Bảng điều khiển hoặc PlaceHolder


152

Sự khác biệt giữa <asp:Panel ><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:


161

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


19
Một bảng điều khiển trở thành một DIV
mbillard

4
Nó cũng có thể trở thành Span, phụ thuộc vào phiên bản của ASP.Net và trình duyệt cũng được hiển thị.
Steven Robbins

9
Meh, đừng để tôi bắt đầu với BrowserCaps - nó cũng có thể trở thành một bảng ô duy nhất trong .Net 1.1 trên trình duyệt "Downlevel".
Zhaph - Ben Duguid

6
Heh, tôi đã cố gắng buộc bảng downlevel xuất hiện trong tâm trí của tôi .. cảm ơn vì đã mang nó trở lại :-)
Steven Robbins

1
@Protectorone: Các ý kiến ​​trên là về bảng điều khiển, không phải giữ chỗ.
Brian

63

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ẹ

  • Wrap: Gets / Đặt xem
    kết thúc nội dung của bảng điều khiển

Có một bài viết hay tại startvbnet ở đây .


15
Một tính năng thú vị khác đối với asp: Bảng điều khiển là nó có thuộc tính DefaultButton, cho biết nút nào sẽ nhấp nếu người dùng nhấn enter trên bàn phím của họ. Tiện dụng nếu bạn có nhiều bảng và nút trên cùng một trang cần hoạt động với nút enter.
Alex York

1
@Marko sau khi vật lộn với quyền thừa kế kiểm soát người dùng tùy chỉnh, tôi đồng ý
drzaus

Vào năm 2009, khi WebForms là cách thực tế để phát triển ASP.NET, thì có. Vào tháng 12 năm 2012, gần 4 năm sau có lẽ là không. Nhận xét kỳ lạ
Ray Booysen

1
liên kết startvbnet đã chết.
mmcglynn

1
Giống như ý kiến ​​của tôi ở trên - cảm ơn vì đã cung cấp chi tiết rất có giá trị. Nó đã giúp làm rõ lý do tại sao chúng được sử dụng trong mã phía sau thay vì các giải pháp khác cho mô-đun DNN mà tôi đang cố gắng nâng cấp.
dùng1585204

36

Kiểm soát nơi giữ

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.Controlsbộ sưu tập để thêm, chèn hoặc xóa điều khiển trong điều khiển PlaceHolder.

Bảng điều khiển

Đ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 Directionbấ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 BackImageUrl để 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 ScrollBarstí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


1
Đây là một lời giải thích chi tiết tuyệt vời. Tôi chỉ cần xem tại sao các thẻ này được sử dụng ở đâu. nhà phát triển cho một mô-đun (bây giờ đã biến mất một cách bí ẩn :)) chỉ có những thứ này được tạo động trong mã phía sau. Tôi chưa bao giờ sử dụng chúng trước đây, đã là một người đi trước JavaScript trong 7 năm qua hoặc lâu hơn. Cảm ơn cho đầu vào tuyệt vời.
dùng1585204

5

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.


5
Mọi người vẫn sử dụng chế độ xem thiết kế? ;)
Matthew Khóa

2
haha - Tôi đã từ bỏ việc sử dụng nó từ nhiều năm trước nhưng MS vẫn không sửa lỗi
George Filippakos

Vẫn đang chờ đợi để sửa lỗi này!
Nikki Punjabi

1

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à DefaultButtontà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 entervào bên trongTextBox1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.