我有一堆作为产品文档的 ASP.NET 网页(具有标准布局)。我想创建某种组合页面,它将所有其他页面内容拉入并将它们连接到一个长页面中。
IFrame 不起作用,因为我不知道每个页面的大小。我可以让组合页面执行大量#includes,这会起作用,但我不想让主更新保持最新(我们有一个页面名称数据库可以随时间变化)。
最终,我追求的是可以获取页面列表的东西,并且为每个页面执行相当于 #include 的该页面到当前页面的操作。
我希望这是有道理的。有什么想法吗?
我有一堆作为产品文档的 ASP.NET 网页(具有标准布局)。我想创建某种组合页面,它将所有其他页面内容拉入并将它们连接到一个长页面中。
IFrame 不起作用,因为我不知道每个页面的大小。我可以让组合页面执行大量#includes,这会起作用,但我不想让主更新保持最新(我们有一个页面名称数据库可以随时间变化)。
最终,我追求的是可以获取页面列表的东西,并且为每个页面执行相当于 #include 的该页面到当前页面的操作。
我希望这是有道理的。有什么想法吗?
您的“文档页面”静态 html 或 .aspx 是否也...
如果它只是静态内容,您可以执行以下操作
//assume that the array of page names has come from the DB.
protected void Page_Load(object sender, EventArgs e)
{
string[] pages = new string [] { "~/Default.html",
"~/Default2.html", "~/Default3.html", "~/Default4.html" };
foreach (string p in pages)
{
Response.WriteFile(p);
}
}
你的页面是什么样的?
我认为它只是普通的 HTML,并且在所有页面上都有一致的模式,不是吗?就像,它有适当的 HTML 标记以及 HEAD 和 BODY 等?
在这种情况下,您可以像阅读普通文本文件一样阅读它,并对它们进行一些字符串解析以提取 BODY 标签内的部分,然后您可以将它们连接起来并将它们打印出 ASP-#include 样式。
要获取 ASP.NET 网站上文件的实际路径名,可以使用Server.MapPath
var actualDiskFilename = Server.MapPath("~/somewhere/somepage.html");
所有System.IO
类在 ASP.NET 中的工作方式都相同,要获取虚拟目录中的文件列表,您可以执行以下操作:
var virtualDir = "~/somefolder/";
var actualDir = Server.MapPath(virtualDir);
var files = Directory.GetFiles(actualDir);
那是你要找的吗?
如果页面是 aspx 文档,您可以使用它Server.Execute
来执行页面并返回生成的 html。然后您可以解析 html 并删除 head- 和 body-tags 并将剩余的 html 连接到您的页面中。
你说 IFRAMES 不能工作是因为你不知道尺寸?那么为什么不根据大小更新 IFRAMES 的大小。
创建一个默认大小 IFRAME 并加载页面,然后借助 javascript 更新大小。你应该看看一些 javascript 框架,如原型或jquery
听起来你应该从一开始就重新考虑格式,如果可能的话。例如,如果您将内容存储在数据库或 XML 文件中,那么您的单个页面可以提供它们的部分,而您的联合页面可以提供您想要的总数的任何组合。
Wouldn't be that hard to convert to if you're only talking a few pages (less than a dozen). Then keeping the documentation up to date is a matter of editing the content, not the display files (admittedly, XML is easier than a database in this respect).