C# 如何在.Net中使用包含

C# 如何在.Net中使用包含,c#,html,asp.net,master-pages,C#,Html,Asp.net,Master Pages,多年来,我们一直在办公室使用经典的ASP,现在正在向ASP.NET过渡。完成菜单的方式始终是使用“include”语句,并为菜单包含一个html文件(以及其他一些内容)。显然,使用.NET母版页是答案,但出现的问题是,当我们添加一个新项目时,它希望基本上与旧的经典ASP项目共享一个菜单。目前,我们为新项目使用母版页,当需要更改时,必须更新两个文件/菜单 我知道Response.WriteFile(),但根据文件夹结构,我无法让它工作(据我所知)。例如,我尝试在.NET母版页上使用以下内容访问经典

多年来,我们一直在办公室使用经典的ASP,现在正在向ASP.NET过渡。完成菜单的方式始终是使用“include”语句,并为菜单包含一个html文件(以及其他一些内容)。显然,使用.NET母版页是答案,但出现的问题是,当我们添加一个新项目时,它希望基本上与旧的经典ASP项目共享一个菜单。目前,我们为新项目使用母版页,当需要更改时,必须更新两个文件/菜单

我知道Response.WriteFile(),但根据文件夹结构,我无法让它工作(据我所知)。例如,我尝试在.NET母版页上使用以下内容访问经典菜单:

<%         
  Response.WriteFile ("../menufolder/menu_body.htm");
%>
但这会“离开”.NET项目文件夹,我猜这就是问题所在。在文件夹结构方面,我是否缺少一些东西,或者有更好的解决方案,我们可以保留现有的html菜单并简单地“包含”它们,这样我们就不必维护两个单独的菜单

编辑:

回顾我的问题并考虑以下问题,是否有一种解决方案可以将htm文件“包含”为菜单,而不是使用Response.Write()更好地工作?(我仍然有兴趣了解响应。无论解决方案如何,都要编写文件夹结构)

菜单代码: (当前“WebRoot”是从单独的包含文件设置的,但可以更改)


我对经典ASP知之甚少,但以下是我的两条建议:

  • 如果要继续使用现有菜单,可以使用预构建步骤将菜单文件复制到新文件夹。以下是步骤:

  • 打开ASP.NET项目
  • 打开属性菜单
  • 转到“构建事件”
  • 这里有两个文本框,一个用于预构建事件,一个用于后构建事件。这些命令允许您定义要在生成开始之前或生成完成之后运行的特定命令行(如cmd.exe)。使用
    copy
    语句,您可以使用其中一个将现有的menu_body.htm文件复制到ASPNETfolder。该语法与在cmd.exe中输入命令行语句时使用的语法相同。我将从以下语法开始:
  • 复制“$(SolutionDir)…\menufolder\menu_body.htm”“$(SolutionDir)menu_body.htm”

    此命令(未测试)应将文件复制到asp.net解决方案的根文件夹中。当您在预生成事件中输入它时,它会在生成项目之前执行此操作,如果您在后生成中执行此操作,它将在生成项目之后执行。您只需编辑经典ASP中的一个,它将在您构建ASP.NET项目时自动复制到新位置

  • 第二个选项是使用ASP.NET菜单控件,它不是自动的,也不是可移植的,但我极力推荐它。ASP.NET菜单控件允许您对菜单进行更多控制,而无需担心div的位置。因为它是默认的ASP.NET,所以它与codebehind类完全集成。解释如何使用它

    这样做的主要问题是,这意味着您无法重用现有的.htm文件。但是,您可以使用ASP.NET站点地图文件自动生成菜单,使其与您对网站所做的任何更改保持最新


您可以执行一个后期生成操作,将menu_body.htm文件复制到ASPNETfolder中的某个位置。另外,你能告诉我你菜单的代码吗?您可能可以使用asp:menu标记来更好地替换此菜单。我添加了菜单代码-我们使用VBScript从另一个包含文件中设置“WebRoot”,理想情况下我们可以保持原样。如果没有,我知道还有其他方法可以做到这一点。你能详细介绍一下“进行后期构建操作”吗?我会补充一个答案。编辑:实际上,关于如何使用经典asp,我错了。我谈到的是使用经典ASP项目属性窗口上的BuildEvents选项卡,并在其上添加一个后期构建步骤。这只是一个在项目构建之后要执行的命令行界面。但是,可以通过asp.net项目上的预构建操作来实现这一点。我将对此做出回答。asp:menu选项很有趣,而且看起来很可靠,但是有了我们100多个菜单和当前的结构,这将是一次大的改革。让我研究一下预构建事件选项,然后再与您联系。谢谢你可以让你的项目生成一个站点地图,然后生成你的菜单。最终,不需要太多的代码。但事实上,这可能是一场斗争。
../ClassicASPfolder/menufolder/menu_body.htm  AND
../ClassicASPfolder/apps/ASPNETfolder/masterpage.aspx
<div id="MenuContent">
    <div id="Wrapper">
        <div id="Menu">
            <a id="1" href="<%=WebRoot%>/home.asp">Home</a>
            <a id="2" href="<%=WebRoot%>/directory.asp">Directory</a>
            <a id="3" href="<%=WebRoot%>/faq.asp">FAQ</a>
            <a id="4" href="<%=WebRoot%>/information.asp">Information</a>
        </div>
    </div>
</div>