使用Panel或PlaceHolder

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

你应该什么时候使用一个?

一个面板扩展到一个跨度(或一个div),其中的内容。 一个占位符就是这样,一个占位符被你放入的任何东西取代。

占位符不会为自己提供任何标签,因此对于在没有外部HTML标签开销的情况下对内容进行分组非常有用。

面板有外部的HTML标签,但有一些很酷的额外的属性。

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

  • Horizo​​ntalAlign:获取/设置
    父级内容的水平alignment

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

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

PlaceHolder控件

使用PlaceHolder控件作为容器来存储dynamic添加到Web页面的服务器控件。 PlaceHolder控件不会产生任何可见的输出,并且仅用作网页上其他控件的容器。 您可以使用Control.Controls集合来添加,插入或删除PlaceHolder控件中的一个控件。

面板控制

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

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

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

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

更多信息在ASP.NET论坛

我在Visual Studio 2010怪异的错误*,如果你把控制在一个占位符,它不会呈现在devise视图模式。

“隐藏字幕”和“空白”标签尤其如此。

我很喜欢使用占位符,而不是面板,但我讨厌事实上,我不能在devise时在GUI中的其他控件内的占位符。

正如其他答案中提到的那样,Panel在HTML中生成一个<div> ,而PlaceHolder则不生成。 但是有更多的理由可以select其中的一种。

为什么是一个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> ,也可以用来包装一组Contol。 但面板有更多的属性可以用来格式化它的内容:

 <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> 

但最有用的function是DefaultButton属性。 当ID与面板中的button相匹配时,当在TextBox内按下enter时,它将触发具有validation的Form Post。 现在用户可以在不按下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尝试上面的代码片段