Визуализируйте элемент управления программно (используя LoadControl), придерживаясь жизненного цикла страницы
Я пытаюсь использовать LoadControl
получить пользовательский элемент управления в коде для целей программного рендеринга. Однако я заметил, что OnInit
метод моего пользовательского контроля не вызывается. Я пропустил важный шаг здесь?
//Loading the control
Page h = HttpContext.Current.Handler as Page;
UserControl userControl = (UserControl)h.LoadControl(pathToControl);
h.Controls.Add((Control)userControl);
//Rendering the control
StringWriter stringWriter = new StringWriter();
HtmlTextWriter writer = new HtmlTextWriter((TextWriter) stringWriter);
userControl.RenderControl(writer);
var result = stringWriter.ToString();
Здесь код выше называется
[ScriptService]
public partial class Ajax : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object AjaxMethod(string productCode) {
//here...
}
}
1 ответ
Решение
Таким образом, вы делаете вызов PageMethods на сервер и хотите, чтобы поток разметки для обновления пользовательского элемента управления был таким, как он выглядит. PageMethods не выполняют жизненный цикл, поэтому он никогда не будет запускать обработчик события OnInit. Люди использовали эту же технику, используя JQuery или обработчик HTTP, и некоторые примеры того, как они это сделали, были здесь: