【问题标题】:How to use an Include with .Net如何在 .Net 中使用包含
【发布时间】:2014-08-28 13:51:24
【问题描述】:

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

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

<%         
  Response.WriteFile ("../menufolder/menu_body.htm");
%>

文件夹结构如下所示:

../ClassicASPfolder/menufolder/menu_body.htm  AND
../ClassicASPfolder/apps/ASPNETfolder/masterpage.aspx

不过,这“离开”了 .NET 项目文件夹,我猜这就是问题所在。关于文件夹结构,我是否缺少一些东西,或者更好的解决方案,我们可以保留现有的 html 菜单并简单地“包含”它们,这样我们就不必维护两个单独的菜单?

编辑:

回顾我的问题并考虑XY Problem,是否有一种解决方案可以将htm 文件“包含”为与使用Response.Write() 分开的菜单,效果更好? (无论解决方案如何,我仍然有兴趣了解 Response.Write 文件夹结构)

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

<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>

【问题讨论】:

  • 您可以做的是将 menu_body.htm 文件复制到 ASPNET 文件夹中的某个位置的构建后操作。另外,你能给出你的 menu_body 文件的代码吗?您也许可以使用 asp:menu 标签作为此菜单的更好替代品。
  • 我添加了菜单代码 - 我们使用 VBScript 从另一个包含文件设置“WebRoot”,理想情况下我们可以保持原样。如果没有,我知道还有其他方法可以做到这一点。你能扩展一下“做一个构建后的动作”吗?
  • 我会添加一个关于它的答案。编辑:实际上,我弄错了如何使用经典的 asp。我谈到的是使用经典 ASP 项目的“属性”窗口上的“构建事件”选项卡,并在那里添加一个构建后步骤。这只是一个在项目构建后执行的命令行界面。但是,可以通过对 asp.net 项目的预构建操作来执行此操作。我会回答的。

标签: c# html asp.net master-pages


【解决方案1】:

我对 Classic ASP 了解不多,但以下是我的 2 条建议:

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

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

    复制 "$(SolutionDir)....\menufolder\menu_body.htm" "$(SolutionDir)menu_body.htm"

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

  • 第二个选项是使用 ASP.NET 菜单控件,它不是自动的,也不是可移植的,但这是我衷心推荐的。 ASP.NET 菜单控件允许您对菜单进行更多控制,而不必担心您的 div 位置。而且因为它是默认的 ASP.NET,它与您的代码隐藏类完全集成。 http://msdn.microsoft.com/en-us/library/ecs0x9w5(VS.80).aspx 解释如何使用它。

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

【讨论】:

  • asp:menu 选项很有趣,而且看起来很可靠,但是凭借我们的 100 多个菜单和当前结构,这将是一次大修。让我看看 Pre-Build 事件选项并回复您。谢谢!
  • 您可以让您的项目生成站点地图并从中生成菜单。最终不需要太多代码。但实际上这可能是一场斗争。
猜你喜欢
  • 2018-01-28
  • 2022-10-13
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 2016-10-31
相关资源
最近更新 更多