在ASP.NET中使用MasterPages

时间:2014-05-29 13:15:18

标签: html css asp.net master-pages master

我的应用程序现在有几页,我将开始使用母版页来减少HTML中的代码量。所以我创建了一个使用母版页面的网页表格'目前我有一个我在那里创建的菜单栏:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="PersonnelMasterPage.master.cs" Inherits="bSimplex.Personnel.PersonnelMasterPage" %>


    <asp:ContentPlaceHolder ID="cnt_MenuBar" runat="server">
            <div class="bsimplex header-bar left">
        <div class="header-context clearfix header-label">
            <asp:Image ID="bsimplexPTLogo" runat="server" CssClass="small-logo" ImageUrl="~/Images/tracker logoOnly.png" />
            <label class="configurationlbl">Personnel Tracker</label>
        </div>
        <div class="menubarbest">
            <ul id="nav">
                <li  class="current"><a href="bPersonnelTrackerDashboard.aspx" >Home</a></li>
                <li><a href="#">Manager</a>
                    <ul>
                        <li><a href="#">Rota</a></li>
                        <li><a href="#">Holiday Requests</a></li>
                    </ul>
                </li>
                <li><a href="#">Absences</a>
                    <ul>
                        <li><a href="bSicknessForm.aspx">Sickness</a></li>
                        <li><a href="bLatenessForm.aspx">Lateness</a></li>
                        <li><a href="bMedicalLeaveForm.aspx">Medical Appointment</a></li>
                        <li><a href="OtherMedical.aspx">Other</a></li>
                    </ul>
                </li>
                <li><a href="#">Reports</a>
                    <ul>
                        <li><a href="#">Attendance Record</a></li>
                        <li><a href="#">Rota</a></li>
                    </ul>
                </li>
                <li><a href="Admin/Administration.aspx">Admin</a></li>
        </div>
    </div>
    </asp:ContentPlaceHolder>

然后在我刚刚创建的Web表单上添加了此内容持有者:

<%@ Page Title="" Language="C#" MasterPageFile="~/Personnel/PersonnelMasterPage.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="bSimplex.WebForm1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cnt_MenuBar" runat="server">
</asp:Content>

首先,我的页面上没有显示任何内容,我想知道我做错了什么?

其次,我有这个菜单栏的CSS样式会保持不变还是因为我已经进入Master页面需要更改吗?

3 个答案:

答案 0 :(得分:3)

在您的母版页上,不要将内容放在 ContentPlaceHolder中。 CPH是您要放置子页面内容的区域(使用内容控件)。

在您的母版页上,如果您将内容放在ContentPlaceHolder中,如果您在子页面上添加相应的内容控件,它将被覆盖。因此大多数情况下,您不会在主页上的CPH中放置任何内容。例外情况是,如果您想要某些“默认”内容,可以覆盖某些子页面。

顺便说一下,您的顶级母版页应该包含您网站的基本布局以及所有必需的标签(例如:<html><head><title><body>等)。然后,将这些ContentPlaceHolders放在您希望子页面添加其内容的位置。

您的CSS应该没有更改,但您需要从母版页而不是子页面链接到它。

答案 1 :(得分:2)

您似乎希望在多个页面之间共享菜单,因此我会尝试这样做:

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" media="screen">
    <link href="/css/style.css" rel="stylesheet" media="screen">
  </head>
  <body>
    <div class="bsimplex header-bar left">
        <div class="header-context clearfix header-label">
            <asp:Image ID="bsimplexPTLogo" runat="server" CssClass="small-logo" ImageUrl="~/Images/tracker logoOnly.png" />
            <label class="configurationlbl">Personnel Tracker</label>
        </div>
        <div class="menubarbest">
            <ul id="nav">
                <li  class="current"><a href="bPersonnelTrackerDashboard.aspx" >Home</a></li>
                <li><a href="#">Manager</a>
                    <ul>
                        <li><a href="#">Rota</a></li>
                        <li><a href="#">Holiday Requests</a></li>
                    </ul>
                </li>
                <li><a href="#">Absences</a>
                    <ul>
                        <li><a href="bSicknessForm.aspx">Sickness</a></li>
                        <li><a href="bLatenessForm.aspx">Lateness</a></li>
                        <li><a href="bMedicalLeaveForm.aspx">Medical Appointment</a></li>
                        <li><a href="OtherMedical.aspx">Other</a></li>
                    </ul>
                </li>
                <li><a href="#">Reports</a>
                    <ul>
                        <li><a href="#">Attendance Record</a></li>
                        <li><a href="#">Rota</a></li>
                    </ul>
                </li>
                <li><a href="Admin/Administration.aspx">Admin</a></li>
        </div>
    </div>
    <div>
        <asp:ContentPlaceHolder ID="cnt_Body" runat="server"></asp:ContentPlaceHolder>
    </div>
</body>

然后在WebForms页面上,执行以下操作:

<%@ Page Title="" Language="C#" MasterPageFile="~/Personnel/PersonnelMasterPage.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="bSimplex.WebForm1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cnt_Body" runat="server">
    <h1>Sickness Form</h1>
    <p>Please fill out the following sickness form...</p>
</asp:Content>

答案 2 :(得分:1)

占位符元素是一个因页面而异的区域。我不认为您希望菜单栏有所不同。因此,将菜单条形码放在母版页中的占位符之前,或者更好地放在用户控件中