Динамические страницы из базы данных в C # - PullRequest
1 голос
/ 02 декабря 2009

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

Например, когда на сайт сделан запрос, я хочу проверить и посмотреть, есть ли этот URL в базе данных, если он есть, то я хочу соответствующим образом отобразить контент. Однако, если это не так, то я хочу, чтобы он продолжил рендеринг настоящей страницы ASPX.

Пытаясь использовать HTTPModule, я не могу заставить страницу, которая существует в базе данных, выписать соответствующий контент. Вот мой код.

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = sender as HttpApplication;
        Uri url = application.Context.Request.Url;

        //Checks to see if the page exists in the database
        PageInformation page = PageMethods.GetPageFromUrl(url.AbsolutePath);

        if (page != null)
        {
            string renderedPage = Renderer.RenderPage(page);
            application.Context.Response.Write(renderedPage);
        }
    }

Однако, пытаясь использовать HTTPHandler, я не могу заставить реальные страницы .aspx правильно отобразить, потому что обработчик обрабатывает глагол * .aspx.

Если у кого-то есть идеи о том, как полностью изменить дизайн, я тоже полностью открыт для этого. Благодаря.

Ответы [ 3 ]

1 голос
/ 07 декабря 2009

Я думаю, что вы ищите простой пример перезаписи URL.

Итак, у вас есть одна страница "default.aspx", которая может принимать аргумент содержимого, которое вы хотите отобразить "default.aspx? Page = home", но вам не нужна часть с неприятными строками запроса "? Page = дом».

это лучше всего решить путем перезаписи URL, которая может использоваться в качестве модуля ISAPI в IIS. Таким образом, вместо строки URL выше, люди видят страницу с именем «home.aspx», и веб-сервер преобразует ее в «default.aspx? Page = home» для вашей страницы, которая может перейти к содержимому «домашней» страницы. из БД и отобразить его на экране.

Вот страница с дополнительной информацией о хорошей реализации этого процесса:

http://www.opcode.co.uk/components/rewrite.asp

1 голос
/ 03 августа 2012

Это поможет:

Type page_type = BuildManager.GetCompiledType ("~/page.aspx");
Page page = (Page) Activator.CreateInstance (page_type);
page.ProcessRequest (Context);
0 голосов
/ 02 декабря 2009

Я считаю, что это показывает, как обрабатывать "нормальные" страницы внутри обработчика

другой пример

...