Discuz!NT官方社区

首页 » Web开发 » ASP.net技术讨论 » [原创]ASP.NET2.0中的Master Page技术
seayhy - 2007-6-18 12:36:00
我们做网站的时候,常常喜欢将整个站点的页面设计成同一种风格,从而统一外观。传统的做法是,将风格的代码Copy到每一个页面里,这样不仅繁琐,而且造成了一些不必要的存储空间开销,辛苦啊!
  ASP.NET妥善地解决了这个问题,在ASP.NET 1.1中有一种称之为模板管理技术的东东,笔者从学习ASP.NET到做项目,一直用.NET FRAMEWORK 2.0,所以对于1.1中的那项技术不大了解。2.0毕竟是Update版的,技术也绝对更好,下面我就给大家介绍一下2.0版本中的Master Page技术。
  为了突出重点,我先直接用代码,不用Visual Studio 2005,呆会再介绍IDE里的操作方法。
  Master Page技术的实现方法是,定义两个文件,一个是模板文件,一个是普通的页面文件。
  模板文件里添加<asp:ContentPlaceHolder>标签,可以添加N多个,分别为每个起一个名字(ID),实际上是N个插入内容位置。
  然后在普通页面中也添加<asp:ContentPlaceHolder>标签,和模板文件里的标签ID对应,在其中添加内容,文本、表单、甚至动态脚本都可以。运行普通页面的时候,就自动将模板文件和普通页面定义的内容整合起来输出。
  
  是不是很爽?下来我就教大家怎么实现!
  第一步:创建master文件,命名为template.master,代码如下:
     <%@ Master %>
       <html><head><title>我的网站</title></head>
      <body>
                        <b>我的网站</b>
      <asp:ContentPlaceHolder id="content1" runat="server">
      </asp:ContentPlaceHolder>
      </body>
     </html>
   说明:<%@Master%>指明了这个页是模板页,有别于<%@Page%<asp:ContentPlaceHolder>是将来插入内容的地方。template.master文件定义了所有页面的头部都有一个粗体我的网站的标题。
  第二步:创建普通页面,content1.aspx文件:
     <%@ Page MasterPageFile="template.master" %>
     <asp:Content ContentPlaceHolderId="content1" runat="server">
                            <ul>
       <li type=disc>读书
       <li type=disc>游戏
       <li type=disc>音乐
       </ul>
     </asp:Content>
  第三步:在IIS里打开这个文件,显示结果图1-1
本帖包含图片[收藏图片]:

                                                  1-1
  一个很简单的Master Page就这样搞定了,简单吧。

  下面我们再举一个加入动态内容的例子。
  依然用上面的模板文件template.master,我们改动一下普通页面文件。新建一个名为dynamic.aspx的文件,内容如下:
     <%@ Page MasterPageFile="template.master" %>
     <asp:Content ContentPlaceHolderId="content1" runat="server">
     <script runat="server" language="C#">
     void Page_Load()
     {   
       if(!Page.IsPostBack)
          {
              lblTax.Text="Hi!";
          }
     }
     </script>
      <aspLabel ID="lblTax" runat="server"></aspLabel>
     </asp:Content>
更复杂的动态内容就跟建普通页面完全一样,笔者也不说废话了,举这个小小例子,起到抛砖引玉的作用。
                                            *            *            *          *          *
下面,我接着介绍一下,在visual studio 2005中应该怎样做。
第一步:创建一个ASP.NET站点,步骤略。(你肯定会)
第二步:删除default.aspxdefault.aspx.cs文件,你先删除,别问我为什么。

第三步:在Solution Explorer中右击Web项目,选择Add New Item。显示如图1-2
本帖包含图片[收藏图片]:

用默认的设置即可。这样就创建了一个名为Masterpage.master的模板文件。
第四步:建立普通页面文件
同第三步操作,不过在对话框中要选择webform,还要把下面的select master page打钩。
本帖包含图片[收藏图片]:

然后选择模板文件,如图1-3:
本帖包含图片[收藏图片]:


这样就创建了一个使用MasterPage.master做模板的普通页面文件。

学完了这些你已经入门了,笔者的使命也就完了,剩下的内容就靠聪明的你去研究啦
源代码:

附件: asp.net.rar (2007-6-18 12:36:24, 784 B)
该附件被下载次数 346

seayhy - 2007-6-20 12:43:00
修正一个错误:
  Master Page技术的实现方法是,定义两个文件,一个是模板文件,一个是普通的页面文件。
  模板文件里添加<asp:ContentPlaceHolder>标签,可以添加N多个,分别为每个起一个名字(ID),实际上是N个插入内容位置。
  然后在普通页面中也添加<asp:ContentPlaceHolder>标签,和模板文件里的标签ID对应,在其中添加内容,文本、表单、甚至动态脚本都可以。运行普通页面的时候,就自动将模板文件和普通页面定义的内容整合起来输出。

这一段里---在普通页面也添加<asp:ContentPlaceHolder>标签------改为<asp:content>标签,不好意思:)
盖茨他爹 - 2007-6-20 18:07:00
感觉用起来很爽啊,以后改模板就方便了。
不过dznt不是用的这种模板技术吧,这种不适合网站后台编辑模板啊,只适合VS.NET编辑模板。
dirandy001 - 2007-6-27 19:52:00
就是母版嘛.:)
谬斯的眼波 - 2007-6-28 2:39:00
谢谢分享
dirandy001 - 2007-6-28 18:47:00
网上的书吧,书网等等,大家知道吧?

比如http://www.npzw.net/Book/ShowBookList.aspx

<--

大家可以在那个网站上看见,这是一个表格。是记录写手们的更新和内容的。我就以此为例问一些问题。



首先,实现这种列表功能,大概是用SQL查询语句,以更新时间降序为条件,

查询数据库得到结果后,绑定在前台页面的。(猜的,也试过了)



用<asp:GrilView>控件等控件绑定数据库列出来是可以实现的,因为控件实现分页相对容易。但是我认为这样做网站会相对变慢。再加上我曾看过该网站前台的源代码,并没有发现那些控件的HTML代码。所以我有理由认为:它是在后台的cs文件中,连接数据库,open()以后,设 select语句查询,以DataReader类辅助<table><tr><a><td>等合成一段字符串,以<%%>绑定到前台。



然后,我一直想不懂的问题就是:它的分页是如何实现的呢?



一直以来我都在想这个问题。我认为无非三种情况:

1>用我想不出来的SQL语句直接查询,比如,一个页面有20条记录,那么如果想看第2页记录的话,则可以:以更新时间为降序,直接查出第20到40条记录,然后直接绑定上去。

2>在cs文件上以我想不出来的代码实现,但我想不出来!!

3>在前台html实现(个人认为不太可能,难道要计算绑定的字符串有多少个<tr>标记?)





以上!这是我一直在想的问题,可惜我没有该类网站的源代码源文件。。。

我想到头都大了!有数据库经验的前辈来给我个痛快吧!..呃。。各位明白我说什么吗?
(不知道为什么.我发不了贴子了,老是说主题不能为空)
1
查看完整版本: [原创]ASP.NET2.0中的Master Page技术