使用面板或PlaceHolder


Answers:


161

面板会扩展到一个跨度(或一个div),其中包含内容。占位符就是这样,一个占位符将替换为您放置的任何内容。


19
小组成为DIV
mbillard

4
它也可以成为Span,这取决于ASP.Net的版本以及它呈现的浏览器。
Steven Robbins

9
嗯,别让我开始使用BrowserCaps-它也可以成为.Net 1.1中“下层”浏览器上的单个单元格表。
Zhaph-Ben Duguid,2009年

6
呵呵,我试图将低级表渲染排除在外。.感谢您将其备份:-)
Steven Robbins 2009年

1
@Protectorone:上面的评论是关于面板的,而不是占位符。
布莱恩

63

占位符本身不会呈现任何标签,因此非常适合对内容进行分组,而无需外部HTML标签。

该面板确实具有外部HTML标记,但确实具有一些很酷的额外属性。

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

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

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

有一个在startvbnet一个很好的文章在这里


15
asp:Panel的另一个很酷的功能是它具有DefaultButton属性,如果用户按下键盘上的Enter键,它将告诉它要单击哪个按钮。如果您在同一页面上有多个面板和按钮需要使用Enter按钮,则非常方便。
亚历克斯·约克

1
@Marko在与自定义用户控件继承进行角力后,我同意
drzaus

在2009年,当WebForms是事实上的ASP.NET开发人员的.NET方法时,是的。在大约4年后的2012年12月,大概还没有。奇怪的评论
Ray Booysen

1
startvbnet链接已死。
mmcglynn 2013年

1
与我上面的评论相同-感谢您提供了非常有价值的细节。它有助于弄清为什么这些代码被用在我的代码中,而不是我要升级的DNN模块的其他解决方案中。
user1585204

36

PlaceHolder控件

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

面板控制

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

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

面板控件提供了几个属性,使您可以自定义行为并显示其内容。使用BackImageUrl属性显示面板控件的自定义图像。使用ScrollBars属性指定控件的滚动条。

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

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


1
这是一个很好的详细说明。我只需要查看为什么在哪里使用这些标签。模块的开发人员(现已神秘消失:))只是在后面的代码中动态创建了这些模块。在过去的7年左右的时间里,我一直是JavaScript前端专家,从没有使用过它们。感谢您的大力投入。
user1585204 '18

5

我觉得Visual Studio 2010中的bug *很奇怪,如果将控件放在占位符中,则它不会在设计视图模式下呈现它们。

对于Hidenfields和Empty标签尤其如此。

我希望使用占位符而不是面板,但是我讨厌在设计时无法在GUI中将其他控件放入占位符的事实。


5
人们仍然使用设计视图模式吗?;)
马修·洛克

2
哈哈-多年前我放弃使用它,但MS仍未修复该错误
George Filippakos

仍在等待修复!
Nikki Punjabi

1

如其他答案中所述,面板会生成<div>HTML格式的文件,而PlaceHolder不会。但是,还有很多原因让您选择其中之一。

为什么选择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>也可以用于包装一组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属性。当ID与面板中的按钮匹配时,当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>

按尝试上面的代码片段enterTextBox1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.