Вопрос

У меня есть несколько веб-страниц 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 проще, чем база данных в этом отношении).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top