Как объединить веб-страницы в ASP.NET - PullRequest
3 голосов
/ 25 октября 2008

У меня есть несколько веб-страниц ASP.NET (которые имеют стандартный макет), которые являются документацией по продукту. Я хочу создать некую комбинированную страницу, которая будет извлекать все остальное содержимое страницы и объединять их в одну длинную страницу.

IFrames не будут работать, потому что я не знаю размер каждой страницы. Я мог бы сделать так, чтобы страница комбинации выполняла кучу #include, и это сработало бы, но я не хочу постоянно обновлять главное обновление (у нас есть база данных имен страниц, которые могут со временем меняться). *

В конечном итоге я ищу что-то, что может получить список страниц, и для каждой из них сделать эквивалент #include для этой страницы на текущей странице.

Надеюсь, это имеет смысл. Есть мысли?

Ответы [ 5 ]

1 голос
/ 25 октября 2008

Являются ли ваши "Страницы документации" статическим 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);
    }
}
0 голосов
/ 25 октября 2008

Похоже, вы должны переосмыслить формат с самого начала, если это возможно. Если вы, например, сохранили содержимое в базе данных или XML-файлах, то ваши отдельные страницы могли бы обслуживать их раздел, а ваша конгломератная страница могла бы обслуживать любую комбинацию требуемой суммы.

Не было бы так сложно перейти, если вы говорите всего несколько страниц (менее десятка). Тогда поддержание документации в актуальном состоянии - это вопрос редактирования содержимого, а не файлов отображения (по общему признанию, XML в этом отношении проще, чем база данных).

0 голосов
/ 25 октября 2008

Вы говорите, что IFRAMES не будут работать, потому что вы не знаете размеры? Ну, почему бы не обновить размер IFRAMES в соответствии с размером.

Создайте размер по умолчанию IFRAME и загрузите страницу, затем с помощью javascript обновите размер. Вы должны взглянуть на некоторые фреймворки javascript, такие как прототип или jquery

0 голосов
/ 25 октября 2008

Если страницы являются aspx-документами, вы можете использовать Server.Execute для запуска страницы и возврата сгенерированного html. Затем вы можете разобрать html, удалить теги head и body и объединить оставшийся html со своей страницей.

0 голосов
/ 25 октября 2008

Как выглядят ваши страницы?

Я полагаю, что это просто HTML-коды и имеют одинаковый шаблон на всех страницах, не так ли? Мол, у него есть правильная разметка HTML вместе с HEAD и BODY и тому подобное?

В этом случае вы можете просто прочитать его, как если бы вы читали обычные текстовые файлы, и проанализировали их, чтобы извлечь часть внутри тегов BODY, а затем просто объединить их и распечатать их в ASP- # include style.

Чтобы получить фактический путь к файлу на веб-сайте 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);

Это то, что вы ищете?

...