Искусственно запускать события страницы в ASP.NET?
Я работаю со статическим классом в C# и пытаюсь использовать Control.RenderControl()
чтобы получить представление строки / разметки Control
,
К сожалению, элемент управления (и все дочерние элементы управления) используют всплывающее окно событий для заполнения определенных значений, например, при создании экземпляра, затем при вызове RenderControl()
на следующем:
public class MyTest : Control
{
protected override void OnLoad(EventArgs e)
{
this.Controls.Add(new LiteralControl("TEST"));
base.OnLoad(e);
}
}
Мне возвращается пустая строка, потому что OnLoad()
никогда не уволен.
Есть ли способ, которым я могу вызвать "поддельный" жизненный цикл страницы? Возможно, использовать манекен Page
контроль?
1 ответ
Я смог сделать это с помощью локального экземпляра Page
а также HttpServerUtility.Execute
:
// Declare a local instance of a Page and add your control to it
var page = new Page();
var control = new MyTest();
page.Controls.Add(control);
var sw = new StringWriter();
// Execute the page, which will run the lifecycle
HttpContext.Current.Server.Execute(page, sw, false);
// Get the output of your control
var output = sw.ToString();
РЕДАКТИРОВАТЬ
Если вам нужен контроль, чтобы существовать внутри <form />
тег, а затем просто добавить HtmlForm
и добавьте свой контроль к этой форме следующим образом:
// Declare a local instance of a Page and add your control to it
var page = new Page();
var control = new MyTest();
// Add your control to an HTML form
var form = new HtmlForm();
form.Controls.Add(control);
// Add the form to the page
page.Controls.Add(form);
var sw = new StringWriter();
// Execute the page, which will in turn run the lifecycle
HttpContext.Current.Server.Execute(page, sw, false);
// Get the output of the control and the form that wraps it
var output = sw.ToString();