Когда я создаю пользовательский контроль ASP.NET во время выполнения, почему он игнорирует файл ASCX? - PullRequest
3 голосов
/ 14 января 2009

Я создал обычный пользовательский элемент управления ASP.NET, включая файл ascx. Например:

MyUserControl.ascx
MyUserControl.ascx.cs

Затем я пытаюсь отобразить элемент управления вручную, во время выполнения, используя код, подобный следующему:

var testMyUserControl = new MyUserControl();
var textWriter = 
    new HtmlTextWriter(
        new System.IO.StringWriter(new StringBuilder()));
testMyUserControl.RenderControl(textWriter);
Console.Write(textWriter.InnerWriter.ToString());

Ничто из того, что я помещаю в файл ASCX, кажется, не рендерится - ни статический HTML, ни какие-либо элементы управления .NET.

Однако, если я переопределю метод Render () в выделенном фрагменте кода и выведу содержимое вручную, он будет отображаться.

Что мне здесь не хватает?

1 Ответ

8 голосов
/ 14 января 2009

Вам не нужно оказывать контроль самостоятельно. Если вам нужно добавить его на страницу динамически, вы делаете это следующим образом:

UserControl myControl = (UserControl) Page.LoadControl("~/Controls/MyControl.ascx");
Page.Controls.Add(myControl);

Скорее всего, вы захотите поместить его в определенную часть страницы, поэтому вместо использования Page.Controls используйте заполнитель:

<asp:Placeholder ID="myPlaceHolder" runat="server" />

и используйте такой код:

myPlaceholder.Controls.Add(myControl);

Это лучший способ добавить элемент управления динамически , но если вместо этого вы можете сделать это декларативно, это будет намного проще.

<%@ Register TagPrefix="my" TagName="Control" Src="~/Controls/MyControl.ascx" %>

<my:Control ID="myControl" runat="server" />

Помните: если вы добавляете элемент управления динамически, обязательно повторно добавляйте элемент управления при каждой загрузке страницы .

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