如何在ASP.NET中使用PlaceHolder控件

发布时间:2019-08-19编辑:脚本学堂
如何在ASP.NET中使用PlaceHolder控件

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

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

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

  在main.aspx页面中创建你选择的站点装饰内容。在你想放置站点丰富内容地方添加一个PlaceHolder控件。然后,添加以下代码到页面的PageLoad事件中:
  private void Page_Load(t 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文件都放在一个单独的文件夹中,可以进一步隔离应用程序。

  一旦你得到那个字符串后,清空PlaceHolder的Controls集合,清除你在先前可能显示的任何ASCX。然后,查看一下代码,看你是否需要加载一个缺省的ASCX。最后,如果p查询字符串是请求的一部分,那么由p查询字符串代表的页面就被加载了。

  你不需要费很大的劲构建代码来在你的站点上显示多个Web页面。在你的VS.NET项目中添加一个新的Web用户控件页面。一旦你添加了这个页面,你就可以把它当作你的应用程序中的唯一的页面来设计并编写代码了;你甚至不需要知道它将在main.aspx页面中运行。当然,如果该页面需要与主页面交互,情况并没有这么简单,但在这里我并不打算讲述这个问题。

   保持你的Web GUIs的恒量元素

  设想你需要在VS.NET开发环境中显示一个AccountLogon用户控件(见图1)。代码只给开发人员提供与该页面细节相关的UI。没有办法改变整体页面的其它方面。

   当你运行http://localhost/test/main.aspx时,首先加载了default.ascx页面,这是由于main.aspx的PageLoad事件的缘故。要导航到Login页面,你只需将一个p查询字符串参数添加到请求--在这个例子中,运行URLhttp://localhost/test/main.aspx?p=myAccLogin。现在显示的就是整个main.aspx页面,以及动态加载的myAccLogin.ascsWeb用户控件。