155

<asp:Panel ><asp:PlaceHolder >ASP.NET有什么区别?

什么时候应该使用其中一种?

4

5 回答 5

162

面板扩展为跨度(或 div),其中包含内容。占位符就是这样,一个占位符,它被您放入其中的任何内容所取代。

于 2009-01-27T13:15:36.800 回答
63

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

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

  • BackImageUrl:获取/设置面板的背景图像的 URL

  • Horizo​​ntalAlign:获取/设置
    父内容的水平对齐方式

  • Wrap:获取/设置
    面板的内容是否换行

startvbnet这里有一篇很好的文章。

于 2009-01-27T13:17:21.337 回答
36

占位符控件

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

面板控制

Panel 控件是其他控件的容器。当您想要以编程方式生成控件、隐藏/显示一组控件或本地化一组控件时,它特别有用。

Direction属性可用于本地化 Panel 控件的内容以显示从右到左书写的语言的文本,例如阿拉伯语或希伯来语。

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

呈现 HTML 时的细微差别:PlaceHolder 控件将不呈现任何内容,但 Panel 控件将呈现为<div>.

更多信息,请访问ASP.NET 论坛

于 2009-01-27T13:22:31.857 回答
5

我在 Visual Studio 2010 中出现了奇怪的错误*,如果您将控件放在占位符内,它不会在设计视图模式下呈现它们。

对于隐藏字段和空标签尤其如此。

我很想使用占位符而不是面板,但我讨厌在 GUI 的设计时不能将其他控件放在占位符中的事实。

于 2011-10-13T15:21:54.463 回答
3

正如其他答案中提到的,Panel 会生成<div>HTML,而 PlaceHolder 不会。但是,您可以选择其中任何一个的原因还有很多。

为什么是占位符?

由于它不会生成自己的标签,因此您可以在其他不能包含 a 的元素中安全地使用它<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>,也可以用来包装一组 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属性。enter当 ID 与 Panel 中的 Button 匹配时,它会在 TextBox 内按下时触发带有验证的 Form Post 。现在用户可以在不按按钮的情况下提交表单。

<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

于 2017-10-19T18:52:43.123 回答