Отрисовать пользовательский элемент управления ascx - PullRequest
1 голос
/ 26 марта 2010

Я хочу использовать ascx в качестве шаблона и визуализировать его программно, используя полученный html в качестве возвращаемого значения метода ajax.

Page pageHolder = new Page();
MyUserControl ctlRender = (MyUserControl)pageHolder.LoadControl(typeof(MyUserControl),null);

pageHolder.Controls.Add(ctlRender);
System.IO.StringWriter swOutput = new System.IO.StringWriter();
HttpContext.Current.Server.Execute(pageHolder, swOutput, false);
return swOutput.ToString();

Все это выполняется, и событие загрузки страницыпользовательский элемент управления срабатывает, но StringWriter всегда пуст.Я видел подобный код в других примерах, что мне не хватает?

Ответы [ 2 ]

3 голосов
/ 26 марта 2010

Вы пробовали это:

public string RenderControl(Control ctrl) 
{
    StringBuilder sb = new StringBuilder();
    StringWriter tw = new StringWriter(sb);
    HtmlTextWriter hw = new HtmlTextWriter(tw);

    ctrl.RenderControl(hw);
    return sb.ToString();
}

Взят прямо из статьи здесь:

Совет ASP.NET: преобразование элемента управления в строку HTML

0 голосов
/ 19 января 2015

Вы всегда должны использовать что-то вроде этого. Controls. Add (TemplateControl.LoadControl ("~ / PathTo / YourControl.ascx")

Причина в том, что в ascx-файле нет внутреннего отображения типов в этот файл (только наоборот). Таким образом, это означает, что если вы инициализируете новый YourControl (), он не будет делать ничего, что вы определили в части ascx. Если бы вы имели

protected override void protected override void Render(HtmlTextWriter output) {
    output.WriteLine("Test");
} 

это даст вам «Тест» в том месте, где вы отдали свой контроль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...