稻草屋
疯行天下
PlaceHolder 控件用作存储动态添加到网页的服务器控件的容器。PlaceHolder 控件不产生任何可见输出并且只能用作网页上其他控件的容器。可以使用 Control.Controls 集合添加、插入或移除 PlaceHolder 控件中的控件。

在MSDN中资料如下:
PlaceHolder
Web 服务器控件使您可以将空容器控件放置到页内,然后在运行时动态添加、移除或依次通过子元素。该控件只呈现其子元素;它不具有自己的基于 HTML 的输出。

例如,您可能想要根据用户选择的选项,在 Web 页上显示数目可变的按钮。在该情况下,用户不面对可能导致混乱的选择,即那些要么不可用、要么与其自身需要无关的选择。

存储 Web 页上动态添加的服务器控件的容器。

有关此类型所有成员的列表,请参阅 PlaceHolder 成员

System.Object
   System.Web.UI.Control
      System.Web.UI.WebControls.PlaceHolder

[Visual Basic]
Public Class PlaceHolder
       Inherits Control
[C#]
public class PlaceHolder : Control
[C++]
public __gc class PlaceHolder : public Control
[JScript]
public class PlaceHolder extends Control

线程安全

此类型的所有公共静态(Visual Basic 中为 Shared)成员是线程安全的。但不保证任何实例成员是线程安全的。

备注

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

示例

C#]

<%@ Page Language="C#" AutoEventWireup="True" %>

<html>
<head>

    <script runat="server">

       void Page_Load(Object sender, EventArgs e)
       {
          HtmlButton myButton = new HtmlButton();

          myButton.InnerText = "Button 1";
          PlaceHolder1.Controls.Add(myButton);

          myButton = new HtmlButton();
          myButton.InnerText = "Button 2";
          PlaceHolder1.Controls.Add(myButton);

          myButton = new HtmlButton();
          myButton.InnerText = "Button 3";
          PlaceHolder1.Controls.Add(myButton);

          myButton = new HtmlButton();
          myButton.InnerText = "Button 4";
          PlaceHolder1.Controls.Add(myButton);
       }

    </script>

</head>

<body>
    <form runat="server">
       <h3>PlaceHolder Example</h3>

       <asp:PlaceHolder id="PlaceHolder1"
            runat="server"/>
    </form>
</body>
</html>

 

在从一个Web页面转换到另一个Web页面时,你的ASP.NET应用程序的用户界面的某些部分常常是保持不变的——如某些“装饰”的部分:页眉处的GIF图片、水平工具条或导航条、左侧的链接、等等。你可以继续用它们,而不必为每个页面重建。

在过去,一个流行的ASP技术就是为一个页面的每个主要部分创建一个include文件,然后建一个整体的HTML表,表的单元包含每个include文件。这种方法是可行的,但是不美观,还容易出错。幸运的是,ASP.NET可以让你用一种更好的方法来解决这个问题,运用一个Visual Studio .NET PlaceHolder Web控件。该控件将其它控件作为一个集合(collection)包含起来。你可以在运行时清除那个collection或添加它;例如,你可以在运行时添加一个Web用户控件(一个模块式的Web页面)。我将讲述如何将PlaceHolder Web控件同Web用户控件结合起来运用,为构建ASP.NET应用程序提供一个方法。

首先在VS.NET中创建一个新的ASP.NET Web应用程序。我在样例代码中用的是C#。创建一个Web窗体,保存的文件带有ASPX扩展名。我称其为我的main.aspx。该页面是你的应用程序中唯一的Web页面,因为你用Web用户控件(ASCX文件)来开发所有的页面“内容”。

在main.aspx页面中创建你选择的站点装饰内容。在你想放置站点丰富内容地方添加一个PlaceHolder控件。然后,将下面的代码添加到你的页面的Page Load事件中: private void Page_Load(object sender,
System.EventArgs e)
{
string p = Request.QueryString.Get("p");
PlaceHolder1.Controls.Clear();
if (p == null)
PlaceHolder1.Controls.Add(LoadControl
("modules/" + "Default" + ".ascx"));
else
{
PlaceHolder1.Controls.Add(LoadControl
("modules/" + p + ".ascx"));
}
}


通过该代码,你可以在项目模块文件夹中看到一个包含Web用户控件页面(ASCX)的名字的查询字符串参数p。你不用将所有ASCX文件都放在一个单独的文件夹中,但这么做的确可以进一步隔离应用程序。

自己写的一个:

private void Page_Load(object sender, System.EventArgs e)
   {
    // 在此处放置用户代码以初始化页面
    if(!IsPostBack)
    {
     AddControlToPlaceHolder();
    }
   }

   private void AddControlToPlaceHolder()
   {
    PlaceHolder1.Controls.Clear();
    for(int i=0;i<=5;i++)
    {
     TextBox control=new TextBox();
     control.Text=i.ToString();
     PlaceHolder1.Controls.Add(control);
     PlaceHolder1.Controls.Add(new LiteralControl("<br>"));   
    }
   }

在加载控件的地方插入一个PlaceHolder:<asp:PlaceHolder ID="PlaceHolder1" Runat="server" />

加载代码:
WEbControl wc = new WebControl(HtmlTextWriterTag.Textarea);
PlaceHolder1.Controls.Add(wc);

这样就可以在PlaceHolder处插入一个Textarea

2、自定义显示用户控件

在从一个Web页面转换到另一个Web页面时,你的ASP.NET应用程序的用户界面的某些部分常常是保持不变

的——如某些“装饰”的部分:页眉处的GIF图片、水平工具条或导航条、左侧的链接、等等。你可以继

续用它们,而不必为每个页面重建。

在过去,一个流行的ASP技术就是为一个页面的每个主要部分创建一个include文件,然后建一个整体的

HTML表,表的单元包含每个include文件。这种方法是可行的,但是不美观,还容易出错。幸运的是,

ASP.NET可以让你用一种更好的方法来解决这个问题,运用一个Visual Studio .NET PlaceHolder Web控

件。该控件将其它控件作为一个集合(collection)包含起来。你可以在运行时清除那个collection或添

加它;例如,你可以在运行时添加一个Web用户控件(一个模块式的Web页面)。我将讲述如何将

PlaceHolder Web控件同Web用户控件结合起来运用,为构建ASP.NET应用程序提供一个方法。

首先在VS.NET中创建一个新的ASP.NET Web应用程序。我在样例代码中用的是C#。创建一个Web窗体,保存

的文件带有ASPX扩展名。我称其为我的main.aspx。该页面是你的应用程序中唯一的Web页面,因为你用

Web用户控件(ASCX文件)来开发所有的页面“内容”。

在main.aspx页面中创建你选择的站点装饰内容。在你想放置站点丰富内容地方添加一个PlaceHolder控件

。然后,将下面的代码添加到你的页面的Page Load事件中: private void Page_Load(object sender,
   System.EventArgs e)
{
string p = Request.QueryString.Get("p");
PlaceHolder1.Controls.Clear();
if (p == null)
PlaceHolder1.Controls.Add(LoadControl
   ("modules/" + "Default" + ".ascx"));
else
{
PlaceHolder1.Controls.Add(LoadControl
   ("modules/" + p + ".ascx"));
   }
}

通过该代码,你可以在项目模块文件夹中看到一个包含Web用户控件页面(ASCX)的名字的查询字符串参

数p。你不用将所有ASCX文件都放在一个单独的文件夹中,但这么做的确可以进一步隔离应用程序。

posted on 2009-07-17 14:01  子谦  阅读(689)  评论(1编辑  收藏  举报