ASP.NET 中 <asp:Panel >和 <asp:PlaceHolder >的区别是什么?
<asp:Panel >
<asp:PlaceHolder >
什么时候应该使用一个而不是另一个?
面板扩展到 span (或 div) ,其中包含内容。占位符就是这样一个被你放进去的东西所取代的占位符。
占位符不为自己呈现任何标记,因此它非常适合对内容进行分组,而不需要外部 HTML 标记的开销。
Panel 确实有外部的 HTML 标记,但是有一些很酷的额外属性。
BackImageUrl: 获取/设置 面板
横向对齐: 获取/设置 父节点的水平对齐方式 目录
Startvbnet 给你上有一篇很好的文章。
使用 PlaceHolder 控件作为容器存储动态添加到网页中的服务器控件。PlaceHolder 控件不产生任何可见输出,仅用作网页上其他控件的容器。可以使用 Control.Controls集合在 PlaceHolder 控件中添加、插入或移除控件。
Control.Controls
面板控件是其他控件的容器.当您希望以编程方式生成控件、隐藏/显示一组控件或本地化一组控件时,它尤其有用。
Direction属性有助于本地化 Panel 控件的内容,以显示从右向左编写的语言(如阿拉伯语或希伯来语)的文本。
Direction
Panel 控件提供了几个属性,允许您自定义其内容的行为和显示。使用 BackImageUrl 属性显示 Panel 控件的自定义图像。使用 ScrollBars属性指定控件的滚动条。
BackImageUr
ScrollBars
呈现 HTML 时有一些小差异: PlaceHolder 控件不呈现任何内容,但 Panel 控件呈现为 <div>。
<div>
详情请浏览 ASP.NET 论坛
我奇怪的错误 * 在2010年的视觉工作室,如果你把控件内的占位符,它不会呈现他们在设计视图模式。
对于 Hidenfields 和 Empty 标签来说尤其如此。
我喜欢使用占位符而不是面板,但是我讨厌在 GUI 设计时不能将其他控件放在占位符中。
正如在其他答案中提到的,Panel 以 HTML 格式生成 <div>,而 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>,也可以用来包装一组控件。但是 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 与 Panel 中的 Button 匹配时,当在 TextBox 中按下 enter时,它将触发一个 FormPost 并进行验证。现在用户可以在不按 Button 的情况下提交表单。
DefaultButton
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>
按 TextBox1中的 enter来尝试上面的代码片段
TextBox1