2009-12-02 4 views
1

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

Например, когда запрос сделан на сайт, я хочу проверить и посмотреть, находится ли этот 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 глагола рассматриваются с обработчиком.

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

ответ

1

Это будет делать трюк:

Type page_type = BuildManager.GetCompiledType ("~/page.aspx"); 
Page page = (Page) Activator.CreateInstance (page_type); 
page.ProcessRequest (Context); 
0

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

other example

1

Я думаю, что вы lookign для переписывания примера простого URL.

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^