使用面板或占位器

ASP.NET 中 <asp:Panel ><asp:PlaceHolder >的区别是什么?

什么时候应该使用一个而不是另一个?

128456 次浏览

面板扩展到 span (或 div) ,其中包含内容。占位符就是这样一个被你放进去的东西所取代的占位符。

占位符不为自己呈现任何标记,因此它非常适合对内容进行分组,而不需要外部 HTML 标记的开销。

Panel 确实有外部的 HTML 标记,但是有一些很酷的额外属性。

  • BackImageUrl: 获取/设置 面板

  • 的背景图像的 URL
  • 横向对齐: 获取/设置
    父节点的水平对齐方式 目录

  • 包装: 获取/设置
    面板内容包装

Startvbnet 给你上有一篇很好的文章。

PlaceHolder 控制中心

使用 PlaceHolder 控件作为容器存储动态添加到网页中的服务器控件。PlaceHolder 控件不产生任何可见输出,仅用作网页上其他控件的容器。可以使用 Control.Controls集合在 PlaceHolder 控件中添加、插入或移除控件。

控制面板

面板控件是其他控件的容器.当您希望以编程方式生成控件、隐藏/显示一组控件或本地化一组控件时,它尤其有用。

Direction属性有助于本地化 Panel 控件的内容,以显示从右向左编写的语言(如阿拉伯语或希伯来语)的文本。

Panel 控件提供了几个属性,允许您自定义其内容的行为和显示。使用 BackImageUrl 属性显示 Panel 控件的自定义图像。使用 ScrollBars属性指定控件的滚动条。

呈现 HTML 时有一些小差异: PlaceHolder 控件不呈现任何内容,但 Panel 控件呈现为 <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 的情况下提交表单。

<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来尝试上面的代码片段