Я хотел бы знать, есть ли метод для вставки параметров в рендеринг HttpContext
, чтобы он был доступен для UserControl
, когда его события жизненного цикла страницы (Page_Init, Page_Load) вызываются во время рендеринг (во время HttpContext.Current.Server.Execute()
)?
Такой метод позволил бы вводить данные в любой UserControl (скажем, посредством вызова удаленного сервиса) без необходимости специализировать его для динамического рендеринга. Он будет загружаться так же, как если бы это был статический элемент управления на странице ASPX.
Начните с этого базового фрагмента кода:
Page page = new Page();
UserControl ctl = (UserControl)page.LoadControl(controlSpec);
page.Controls.Add(ctl);
// want to inject data into the control at this point
StringWriter writer = new StringWriter();
HttpContext.Current.Server.Execute(page, writer, true);
String renderedContent = writer.ToString();
return renderedContent;
Я видел пример @ScottGu ViewManager , в котором он добавляет член Data в каждый из своих UserControls
и использует отражение, чтобы вставить источник данных в этот член, прежде чем элемент управления будет отображен в HTML.
Я также видел, как Стефан Седич взял пример @ScottGu, где он получает обобщенный ViewManager<Control>
, который допускает то же самое, но избегает необходимости размышлений.
Например, я хотел бы иметь возможность добавить параметр к объекту Request
или к QueryString
в HttpContext перед рендерингом UserControl
.