Попытка получить HTML-код элемента управления в IHttpHandler

Я создал класс, реализующий IHttpHandler, и мне нужно, чтобы он возвращал визуализированный HTML-код созданного мной пользовательского элемента управления с привязкой к данным. Хотя я могу заставить это работать, это работает не так, как я надеялся ... По сути, я создаю новую страницу () и добавляю к ней Repeater, устанавливаю шаблон элемента этого ретранслятора в свой пользовательский элемент управления (.ascx), установите источник данных, а затем привяжите его. Наконец, я прошу его выполнить рендеринг, а затем собираю этот HTML-код и отправляю его обратно по конвейеру.

Проблема в том, что запускаются только методы Render () любых элементов управления в моем пользовательском элементе управления, никаких событий Init (), Load () и т. Д. Почему это? И как я могу заставить их стрелять, как вы обычно ожидаете?

StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);

Page page = new Page();
Repeater rpt = new Repeater();

page.Controls.Add(rpt);

rpt.ItemTemplate = ResourceServices.LoadTemplate("mytemplate.ascx");
rpt.DataSource = datasource;
rpt.DataBind();

rpt.RenderControl(hw);

HTML = sb.ToString();

person MadSkunk    schedule 06.11.2012    source источник


Ответы (1)


Вам нужно будет запустить страницу, чтобы события активировались. Попробуйте заменить строку RenderControl на:

context.Server.Execute(page, hw, false);

http://msdn.microsoft.com/en-us/library/ms150027.aspx

person Richard Deeming    schedule 06.11.2012
comment
Ага! Большое спасибо, избавил меня от взлома! Совершенно забыл об этом методе ... Ой! - person MadSkunk; 06.11.2012