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

标签 c# asp.net .net web webforms

我正在处理一个 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>

谢谢!!

最佳答案

NOTE: In addition to the linked files feature described here, there is a new shared project feature 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. 在解决方案资源管理器中右键单击要共享文件的项目,然后单击添加 -> 现有项
  2. 在“添加现有项”对话框中,导航到 SharedFiles 文件夹。
  3. 突出显示 Header.masterHeader.master.csHeader.master.designer.cs 文件。
  4. 在“添加现有项”对话框的右下角,单击“添加”按钮旁边的向下箭头(不是“添加”按钮本身!),然后单击下拉列表中的添加为链接 项.

如果操作正确,该文件的图标上会有一个箭头,表明它是一个链接文件。现在,当您对母版页进行更改时,更改将反射(reflect)在所有项目中。

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

MasterPageFile="~/Header.master"

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

关于c# - 如何在我的项目之间共享母版页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29051903/

相关文章:

c# - 如何让一个方法接受两种类型的数据作为参数?

c# - 使用代码添加分支模板不会复制布局/渲染数据,为什么/如何修复?

c# - 设置最大网页宽度

c# - TPL 数据流是否适用于这种设计类型?

asp.net - 使用 Visual Studio 2015 在 gulp 中检测发布/调试

c# - Excel 下载过程在 ASP.NET 中的大型数据集的情况下死于页面

c# - 如何将列表转换为字符串并返回

c# - 使用 .NET 将 1,000,000 条记录更新(填充)到数据库中的最快方法

C# 反序列化根 JSON 未知键

c# - 死锁后重新提交事务