更新:我在a blog post 中对此进行了更深入的解释。
假设当您指出“HTML 页面”时您指的是 .aspx 页面,我会这样做:
假设我有一个名为 foo.aspx 的页面,并且我有特定于它的 JavaScript。我将 .js 文件命名为 foo.aspx.js。然后我在 base 页面类中使用类似的东西(即我的所有页面都继承自这个类):
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
string possiblePageSpecificJavaScriptFile = string.Format("{0}.js", this.TemplateControl.AppRelativeVirtualPath);
if (File.Exists(Server.MapPath(possiblePageSpecificJavaScriptFile)) == true)
{
string absolutePath = possiblePageSpecificJavaScriptFile.Replace("~", Request.ApplicationPath);
absolutePath = string.Format("/{0}", absolutePath.TrimStart('/'));
Page.ClientScript.RegisterClientScriptInclude(absolutePath, absolutePath);
}
}
因此,对于我的应用程序中的每个页面,这将查找与页面名称匹配的 *.aspx.js 文件(在我们的示例中为 foo.aspx.js),并在呈现的页面中放置一个引用它的脚本标签。 (base.OnLoad(e); 之后的代码最好被提取出来,我只是尽量保持简短!)
为了完成这个,我有一个注册表黑客,它会导致任何 *.aspx.js 文件在 Visual Studio 的解决方案资源管理器中折叠到 *.aspx 页面下方(即它会隐藏在页面下方,就像 * .aspx.cs 文件确实如此)。根据您使用的 Visual Studio 版本,注册表 hack 会有所不同。这是我与 Windows XP 一起使用的一对(我不知道它们是否与 Vista 不同,因为我不使用 Vista) - 将每个文件复制到一个文本文件中,然后用 . reg 扩展名,然后执行文件:
Visual Studio 2005
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472b-9ABA-BC803B73C61A}\RelatedFiles\.aspx\.js]
@=""
Visual Studio 2008
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{E24C65DC-7377-472b-9ABA-BC803B73C61A}\RelatedFiles\.aspx\.js]
@=""
您可能需要重新启动您的机器才能生效。此外,嵌套只会发生在新添加的 .js 文件中,您拥有的任何已命名为 *.aspx.js 的文件都可以通过将它们重新添加到项目中或手动修改 .csproj 文件的 XML 来进行嵌套。
无论如何,这就是我做事的方式,它确实有助于让事情井井有条。对于包含常用 JavaScript 的 JavaScript 文件,我将它们保存在名为 JavaScript 的根级文件夹中,并且在我的基本页面类中还有一些代码可以添加这些引用。这应该很简单,可以弄清楚。希望这对某人有所帮助。