Искусственно запускать события страницы в 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();
Другие вопросы по тегам