首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

15.3  动态选择母版页

【本节示例参考:\示例代码\C15\SeletctMasterPage】

有时候,网站中存在两个母版页,内容页面需要根据不同的情况选择不同的母版页。例如,对于eBooks系统来说,假设有两类用户使用系统。

(1)已登录的用户:母版页上显示导航信息。

(2)未登录的用户:母版页上显示一个“注册会员”链接。

实现后的页面如图15.11所示。

图15.11  根据用户是否登录自动选择不同的母版页

想要实现这一功能,可使用内容页的PreInit事件,改变页面的MasterPageFile属性。下面的示例,将完成这个功能。

1.创建两个母版页

创建示例SelectMasterPage,按照【15.1.1】节步骤添加两个母版页MasterPage_LoginUser和MasterPage_GuestUser,其中前者与前面几节示例中的母版页相同,后者源代码如下。

代码15-9  未登录用户的母版页:Computer.aspx

1.      <div>

2.          <table border="1px" style="width: 80%; height: 100%;">

3.              <tr>

4.                  <td colspan="2" align="center">

5.                      <img src="images/book_room.JPG" alt="logo" />

6.                  </td>

7.              </tr>

8.              <tr>

9.                  <td align="left">

10.                    <a href="#">注册成为会员吧!</a>

11.                 </td>

12.                <td>

13.                    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

14.                    </asp:ContentPlaceHolder>

15.                </td>

16.            </tr>

17.            <tr>

18.                <td colspan="2" align="center">

19.                    &copy2007 MyBookRoom

20.                </td>

21.            </tr>

22.        </table>

23.    </div>

与已登录用户母版页的区别主要在于去掉了左侧的超级导航,取而代之是一个“注册会员”链接。

2.模拟登录页面

本例中,不真正实现用户登录功能,仅仅利用Default.aspx页面进行简单的模拟。放置两个按钮在上面,代码如下。

代码15-10  用户模拟登录的页面:Default.aspx

1.      <div>

2.          <asp:Button ID="ButtonMember" runat="server" OnClick="ButtonMember_Click" Text="以会员身份进入" />

3.          <asp:Button ID="ButtonGuest" runat="server" OnClick="ButtonGuest_Click" Text="以游客身份进入" />

4.      </div>

两个Button控件ButtonMember和ButtonGuest的功能是,将页面跳转到Computer.aspx页面上,不过ButtonMember首先创建一个Session变量login,并赋值为true以表示用户已经登录;而ButtonMember则赋值为false。两者的单击事件如下。

代码15-11  用户模拟登录的页面:Default.aspx

1.      /// <summary>

2.      /// “以会员身份进入”单击事件

3.      /// </summary>

4.      protected void ButtonMember_Click(object sender, EventArgs e)

5.      {

6.          Session.Add("login", true);

7.          Response.Redirect("Computer.aspx");

8.      }

9.     

10.    /// <summary>

11.     /// “以游客身份进入”单击事件

12.    /// </summary>

13.    protected void ButtonGuest_Click(object sender, EventArgs e)

14.    {

15.        Session.Add("login", false);

16.        Response.Redirect("Computer.aspx");

17.    }

3.利用Pre_Init事件选择母版页

添加Computer.aspx页面,并选择默认的母版页为MasterPage_GuestUser.master,然后在其PreInit事件中,实现根据用户是否登录自动选择母版页的功能。

代码15-12  自动选择母版页:Computer.aspx

1.      /// <summary>

2.      /// <summary>

3.      /// 根据用户是否登录选择母版页

4.      /// </summary>

5.      protected void Page_PreInit(object sender, EventArgs e)

6.      {

7.          if (Convert.ToBoolean(Session["login"]))

8.              Page.MasterPageFile = "~/MasterPage_LoginUser.master";

9.          else

10.            Page.MasterPageFile = "~/MasterPage_GuestUser.master";

11.     }

第7行判断了Session变量login是否为真,如果为真则利用Page的MasterPageFile属性,指定页面的母版页为MasterPage_LoginUser;反之,指定为MasterPage_GuestUser.master。

 

为什么需要使用页面的PreInit事件,而不能用Load事件或Init事件?这是因为页面在Load或Init页面之前,就已经和母版页融合在一起。

承上启下

¢ 学完本章后,读者需要回答:

1.母版页有何作用?

2.如何创建一个母版页,并利用其使多个页面具有统一的布局?

3.母版页和内容页是如何融合在一起的?

4.母版页和内容页融合在一起的时候,各自的生命周期事件顺序是怎样的?从这个角度上,应该将母版页视为普通.aspx页面,还是一个用户控件更合适?

5.如何在母版页内部使用控件触发事件?

6.如何在母版页中访问内容页中的控件?反之如何实现?

7.如何利用编程的方式,动态的为内容页选择不同的母版页?

¢ 在下一章中,读者将会了解:

1.ASP.NET 2.0导航系统的机制。

2.利用站点地图SiteMap导航系统页面。

3.利用默认的Map.sitemap文件设置站点地图数据。

4.使用默认的方法读取Map.sitemap文件,并用SiteMapPath、TreeView及Menu导航控件,实现网站的导航。

5.为网站配置多个站点地图。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论