如何在我的项目之间共享母版页

How to share Master Pages between my projects

我正在处理一个 Web 项目,我需要共享一个母版页,以便在我创建新页面时,它具有基本布局。 我的想法是使用该母版页创建一个项目,然后在每个 Web 项目中将其添加为参考。 但问题是我不知道如何将母版页嵌入到我想要应用 MP 的 .aspx 文件中,或者这是否是在项目之间共享母版页的最佳方式。 我会感谢任何帮助或评论!

在这里我给你我的代码(这不起作用):

Index.aspx:

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="" CodeBehind="Index.aspx.cs" Inherits="MiWeb.Index" %>
    <HeaderMp:Header ID="ctntHead" ContentPlaceHolderID="head" runat="server">
        <title>SITPer</title>   
    </HeaderMp:Header>

Header.Master:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Header.Master.cs" Inherits="MasterPages.Header" %>

<!DOCTYPE html>

<html>
<head>
    <title></title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="description" content="" />
        <meta name="keywords" content="" />
        <script src="js/jquery.min.js"></script>
        <script src="js/jquery.dropotron.min.js"></script>
        <script src="js/skel.min.js"></script>
        <script src="js/skel-layers.min.js"></script>
        <script src="js/init.js"></script>         
        <noscript>
            <link rel="stylesheet" href="css/skel.css" />
            <link rel="stylesheet" href="css/style.css" />
            <link rel="stylesheet" href="css/style-desktop.css" />
        </noscript>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <div>
        <!-- Header -->
        <div id="header-wrapper" >
            <div id="header">                   
                <!-- Logo -->
                <div id="logo">
                    <h1><a href="Index.aspx">SITPer</a></h1>
                    <p>Prueba</p>
                </div>
            </div>
        </div>  
        <asp:ContentPlaceHolder ID="body" runat="server">

        </asp:ContentPlaceHolder>
    </div>
</body>
</html>

谢谢!!

我认为您没有在页面中添加母版页的地址 (MasterPageFile="")。 你在使用 visual studio 吗? 如果你是那么你只需要使用 ctrl+shift+a 和 select 使用主页的网络表单。

Master Page:
    <%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site1.master.vb" Inherits="WebApplication2.Site1" %>

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

        </asp:ContentPlaceHolder>

    Page.aspx which uses masterpage:
        <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site1.Master" CodeBehind="Registration Form.aspx.vb" Inherits="WebApplication2.Registration_Form" %>
        <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

NOTE: In addition to the linked files feature described here, there is a new in Visual Studio 2015+ that allows you to create a project exclusively for sharing code that will be compiled into the project it is added to.

母版页只能属于一个 Web 项目。但是,Visual Studio/MSBuild 有一个特性,可以让你在项目之间共享代码,从而有效地得到想要的结果。如果您将母版页文件(所有文件包括 .master.master.cs.master.designer.cs)放入与您的解决方案处于同一级别的文件夹中,您可以使用 linked file feature of Visual Studio将文件添加为链接文件(未复制到项目文件夹中的文件)。

在 Windows 资源管理器中,打开包含您的解决方案 (.sln) 文件的目录。右键单击空白处,然后单击 New -> Folder。将文件夹命名为 SharedFiles。将 Header.masterHeader.master.csHeader.master.designer.cs 文件复制到文件夹中。

在 Visual Studio 中,从所有项目中删除 Header.master 文件。然后针对每个要共享 Header.master 页面的项目执行这些步骤。

  1. 在解决方案资源管理器中右键单击要共享文件的项目,然后单击 Add -> Existing Item
  2. 在“添加现有项”对话框中,导航到 SharedFiles 文件夹。
  3. 突出显示 Header.masterHeader.master.csHeader.master.designer.cs 文件。
  4. 在“添加现有项”对话框的右下角,单击“添加”按钮旁边的向下箭头(不是“添加”按钮本身!),然后单击下拉列表中的 Add As Link 项。

如果你做对了,文件的图标上会有一个箭头,表明它是一个链接文件。现在,当您对母版页进行更改时,更改将反映在所有项目中。

您还有一个问题必须在 Index.aspx 页面中解决。您必须将母版页文件设置为该文件的虚拟位置。如果您按照上面的说明进行操作,路径将是...

MasterPageFile="~/Header.master"

但请注意,如果您将文件(或链接文件)放在 Web 项目的子目录中,虚拟路径将会改变。