如何使用 asp.net 创建布局

How to create layout using asp.net

如何在单独的文件中创建包含页眉、主要内容和页脚的布局?

Site.Master 中有一个菜单、主要内容和页脚在一起,我想将它们分开。 我创建了带有母版页的新 Web 表单 (Menu.aspx):

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Menu.aspx.cs" Inherits="WebApplication2.Menu" %>
<asp:Content ID="Content1" ContentPlaceHolderID="menu" runat="server">
    <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" runat="server" href="~/">Application name</a>
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li><a runat="server" href="~/">Home</a></li>
                        <li><a runat="server" href="~/About">About</a></li>
                        <li><a runat="server" href="~/Contact">Contact</a></li>
                    </ul>
                </div>
            </div>
        </div>
</asp:Content>

我正在尝试将其包含在 Site.Master:

<form runat="server">
    <!-- Menu -->
    <asp:ContentPlaceHolder ID="menu" runat="server">
        </asp:ContentPlaceHolder>

    <!-- Main content -->
    <div class="container body-content">
        <asp:ContentPlaceHolder ID="MainContent" runat="server">
        </asp:ContentPlaceHolder>

    </div>
</form>

但它不会呈现。怎么了?

我认为 Menu.ascx 中的 MasterPageFile 不应该存在。菜单就像一个局部视图,它不应该有主页。但是,我会选择不同的方法。

Menu

<%@ Page Title="" Language="C#" AutoEventWireup="true" CodeBehind="Menu.ascx.cs" Inherits="WebApplication2.Menu" %>
    <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" runat="server" href="~/">Application name</a>
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li><a runat="server" href="~/">Home</a></li>
                        <li><a runat="server" href="~/About">About</a></li>
                        <li><a runat="server" href="~/Contact">Contact</a></li>
                    </ul>
                </div>
            </div>
        </div>

我在菜单页面上所做的:我删除了菜单的 MasterPageFile 属性,因为菜单不是整个页面而是页面的一部分(就像 MVC 中的部分视图)。此外,删除了 <asp:Content> 标签,因为您不希望菜单呈现在 Site.Master.

的主菜单中

Site.Master

将这一行放在 Site.Master

的顶部
<%@ Register TagPrefix="Menu" TagName="Menu" Src="the path to your Menu.ascx" %>

使用 Menu.Ascx 页面的路径更改 Src 属性的值。

现在您可以像这样在 Site.Master 中的任意位置呈现 Menu.ascx 页面:

<Menu:Menu runat="server" />

我不是 100% 确定它会起作用,因为我还没有测试过它。如果有什么不对的在下面评论。我会帮你的。