Как объединить веб-страницы в ASP.NET
-
04-07-2019 - |
Вопрос
У меня есть несколько веб-страниц ASP.NET (которые имеют стандартный макет), которые представляют собой документацию по продукту. Я хочу создать некую комбинированную страницу, которая будет извлекать все остальное содержимое страницы и объединять их в одну длинную страницу.
IFrames не будут работать, потому что я не знаю размер каждой страницы. Я мог бы сделать так, чтобы страница комбинации выполняла кучу #include, и это сработало бы, но я не хочу постоянно обновлять главное обновление (у нас есть база данных имен страниц, которые могут со временем меняться). р>
В конечном счете, мне нужно кое-что, что может получить список страниц, и для каждой из них сделать эквивалент #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 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);
Это то, что вы ищете?
Если страницы являются aspx-документами, вы можете использовать Server.Execute
для запуска страницы и возврата сгенерированного html. Затем вы можете разобрать html, удалить теги head и body и объединить оставшийся html со своей страницей.
Вы говорите, что IFRAMES не будут работать, потому что вы не знаете размеры? Ну, почему бы не обновить размер IFRAMES в соответствии с размером.
Создайте IFRAME размера по умолчанию и загрузите страницу, затем с помощью javascript обновите размер. Вам следует взглянуть на некоторые фреймворки JavaScript, такие как прототип или jquery
Звучит так, будто вы должны переосмыслить формат с самого начала, если это возможно. Если вы, например, сохранили содержимое в базе данных или XML-файлах, то ваши отдельные страницы могли бы обслуживать их раздел, а ваша конгломератная страница могла бы обслуживать любую комбинацию требуемой суммы.
Не было бы так сложно перейти, если вы говорите всего несколько страниц (менее десятка). Тогда поддержание документации в актуальном состоянии - это вопрос редактирования содержимого, а не файлов отображения (по общему признанию, XML проще, чем база данных в этом отношении).