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

Я создал обычный пользовательский элемент управления 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 () в коде программной части и вручную выведу контент, он будет отображаться.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
3 233
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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" />

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

Предлагаемый вами метод работал бы нормально, если бы я делал это внутри проекта веб-сайта, но как бы я сделал это, скажем, в консольном приложении, внутри обычного класса, который не расширяет Page?

Jonathan 14.01.2009 04:13

Вы не можете. Для метода LoadControl требуется виртуальный путь от веб-сервера (Casini, IIS). Это единственный способ использования UserControl.

Adam Lassek 14.01.2009 05:50

Другие вопросы по теме

Передача информации в пользовательское управление в ASP.NET MVC
Проблема UserControls Classname-Namespaces
Как получить доступ к элементу управления ASP, расположенному в пользовательском элементе управления, через JavaScript
Пользовательские элементы управления Visual Studio 2008, зарегистрированные в web.config, не регистрируются в intellisense
Каков ваш опыт использования веб-частей ASP.NET 2.0?
Почему значение User (как в User.Identity.Name) в моем абстрактном базовом контроллере равно нулю?
Почему дочерние элементы моего пользовательского элемента управления не инициализируются?
Как запустить раскадровку в шаблоне данных в элементе управления содержимым в пользовательском элементе управления из выделенного кода?
Попытка прочитать или записать в защищенную память. Это часто указывает на то, что другая память была повреждена
Winform - определить, оставила ли мышь пользовательский контроль