如何在ASP.NET中连接网页

时间:2008-10-25 17:50:30

标签: asp.net webpage concatenation

我有一堆ASP.NET网页(有标准布局),它们是产品文档。我想创建某种组合页面,将所有其他页面内容拉入并将它们连接成一个长页面。

IFrame不起作用,因为我不知道每个页面的大小。我可以让组合页面做很多#includes,这样可行,但我不想让主更新保持最新状态(我们有一个可以随时间变化的页面名称数据库)。

最终我会找到可以获取页面列表的内容,并且每个页面都会在当前页面中为该页面执行相应的#include。

我希望这是有道理的。有什么想法吗?

5 个答案:

答案 0 :(得分:1)

您的“文档页面”是静态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);
    }
}

答案 1 :(得分:0)

您的网页是什么样的?

我认为它只是简单的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);

这就是你要找的东西吗?

答案 2 :(得分:0)

如果页面是aspx文档,您可以使用Server.Execute来执行页面并返回生成的html。然后你可以解析html并删除head-body-tags并将剩余的html连接到你的页面。

答案 3 :(得分:0)

你说IFRAMES不起作用,因为你不知道尺寸?那么为什么不根据大小更新IFRAMES的大小。

创建一个默认的大小IFRAME并加载页面,然后借助javascript更新大小。你应该看一些像原型或jquery

这样的javascript框架

答案 4 :(得分:0)

听起来像我应该从一开始就重新考虑格式,如果可能的话。例如,如果您将内容存储在数据库或XML文件中,那么您的各个页面可以提供他们的部分,您的集团页面可以提供您想要的总数的任意组合。

如果你只说几页(不到十几页),那就不难转换。然后让文档保持最新是编辑内容的问题,而不是显示文件(诚然,在这方面,XML比数据库更容易)。