2009-07-07 3 views
0

Я пишу пользовательский обработчик HTTP для предоставления формы редактирования для сетки с использованием существующих пользовательских элементов управления. В основном, мой обработчик создает страницу, форму, заголовок и другие элементы управления, необходимые для правильного отображения существующих пользовательских элементов управления и в конце ProcessRequest, я использую Server.Execute для выполнения страницы, которая была динамически создана. Я делаю это, потому что решение, в котором оно находится, является проектом, контролирующим пользователя, и нет страниц, и мы не можем добавить их. Это необходимо для многократного использования для нескольких проектов.Как получить пользовательский IHttpHandler, способный обрабатывать обратные вызовы?

Это прекрасно работает до тех пор, пока пользовательские элементы управления, добавленные на эту «страницу», не потребуют использования механизма обратной передачи. В пользовательском элементе управления Page.IsPostBack всегда является ложным, а управляющие события (например, нажатие кнопки) не обрабатываются. Очевидно, что мне не хватает какой-то важной части из того, как работает типичная страница ASP.NET. Класс страницы - это всего лишь реализация IHttpHandler, но есть много кода, который, как мне кажется, не является необходимым для того, чтобы основные функции работали здесь.

Любые идеи?

Вот базовый код моего базового HTTP-обработчика. У меня есть другие классы, которые наследуют от этого базового обработчика, чтобы добавить фактические пользовательские элементы управления в форму страницы.

public void ProcessRequest(HttpContext context) { 
     context.Response.ContentType = "text/html"; 

     HtmlGenericControl htmlPage = GetHtml(); 
     AddTitle(); 
     htmlPage.Controls.Add(_head); 

     HtmlGenericControl htmlBody = GetBody(); 

     _form.Action = context.Request.Url.ToString(); 
     _form.Method = "POST"; 
     htmlBody.Controls.Add(_form); 

     htmlPage.Controls.Add(htmlBody); 

     AddAjaxManager(); 
     AddScriptManager(); 

     _page.Controls.Add(htmlPage); 
     //_page.ProcessRequest(context); 

     context.Response.CacheControl = "No-Cache"; 
     context.Server.Execute(_page, context.Response.Output, true); 
    } 

    public bool IsReusable { get { return false; } } 

ответ

0

Чтобы выполнить эту работу, я унаследовал от страницы вместо реализации IHttpHandler. Вам все равно нужно построить весь HTML-страницы, но при этом вы получите всю чудо (или нет) жизненного цикла страницы ASP.NET WebForms.

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