Member 12652465 Ответов: 1

Как закодировать мой файл класса в отдельный файл для работы на другой странице


I created a code to dynamically create button control, it worked in the .aspx and aspx.cs file, but when I separated the code in a separate class file the project would not compile


Что я уже пробовал:

Я создал код для динамического создания элемента управления button, он работал в файлах.aspx и aspx.cs, но когда я разделил код в отдельном файле класса, проект не компилировался. Ниже приведен код, который работал в файлах aspx и aspx. cs при загрузке страницы:

Код aspx-файл: &ЛТ;АСП:заполнитель идентификатор="PlaceHolder1" атрибут runat="сервер"и GT;
С фоновым кодом:

Кнопка button = новая кнопка();
кнопка.Text = " Тест";
PlaceHolder1.Контроля.Добавить (кнопка);

кнопка.Нажмите кнопку += делегировать
{
// Сделайте свой код здесь

};

Но когда я разделил его в файле класса как код ниже, он не будет компилироваться, а покажет ошибку, которая говорит: “CS0103: имя 'PlaceHolder1' не существует в текущем контексте.

использование системы;
использование системы.Коллекции.Общий;
использование System. Linq;
использование системы.Сеть;
используя системы.Веб.ИП;
используя системы.Сведения;
используя системы.Данных.Поставщики sqlclient;
используя системы.Веб.Пользовательского интерфейса.WebControls;

пространство имен по умолчанию.Папке app_code
{
открытый класс CreateButtonClass
{

общественные CreateButtonClass()
{
}
общественного недействительными CreateTestButton()
{
Кнопка button = новая кнопка();
кнопка.Text = " Тест";
PlaceHolder1.Контроля.Добавить (кнопка);

кнопка.Нажмите кнопку += делегировать
{
// Сделайте свой код здесь

};
}
Мой вопрос заключается в том, как мне организовать код так, чтобы я мог скомпилировать и вызвать метод?

F-ES Sitecore

Вам придется передать заполнитель в качестве параметра функции

общественного недействительными CreateTestButton(заполнитель заполнитель)
{
Кнопка button = новая кнопка();
кнопка.Text = " Тест";
заполнитель.Управления.Добавить (кнопка);


вызывающий код будет находиться в коде позади страницы aspx, на которой есть PlaceHolder1, и будет

CreateTestButton(PlaceHolder1);

Однако, как уже упоминалось в решении 1, Если вы хотите повторно использовать компоненты, то посмотрите на пользовательские элементы управления как на asp.net фреймворк разработан с учетом повторного использования, поэтому вы должны использовать инструменты, которые он вам дает.

Member 12652465

Привет, спасибо за вашу помощь до сих пор. Я попробовал код, прежнее сообщение об ошибке исчезло, но новое сообщение об ошибке: System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.указывающий на заполнитель.Управления.Добавить (кнопка);

Member 12652465

Привет, спасибо за вашу помощь до сих пор. Я попробовал код, прежнее сообщение об ошибке исчезло, но новое сообщение об ошибке: System.NullReferenceException: Object reference not set to an instance of an object.pointing to placeholder.Управления.Добавить (кнопка);

F-ES Sitecore

тогда "заполнитель", вероятно, равен нулю.

Member 12652465

Но как мне решить этот вопрос? Я все еще новичок в этом деле. пожалуйста помочь.

1 Ответов

Рейтинг:
1

OriginalGriff

Это трудно объяснить, потому что, похоже, вы не совсем понимаете, с чем пытаетесь работать.
То PlaceHolder1 контейнер - это часть класса Page, который вы использовали-он не существует в вашем классе CreateButtonClass и не должен существовать, потому что он специфичен для конкретной страницы. И если вы создаете этот новый класс, чтобы повторно использовать код на нескольких страницах, то попытка ссылаться на определенный контейнер внутри вашей страницы - большая ошибка!
Я бы посоветовал вам вместо того, чтобы делать это таким образом, чтобы добавить "общую функциональность" к разделенным страницам, вместо этого вы посмотрите на создание UserControl и добавите его к соответствующим страницам: ASP.NET пользовательские элементы управления[^]
Как: создать ASP.NET пользовательский контроль[^] тоже должно быть полезно.
Таким образом, вы поддерживаете принципы проектирования ООП и можете получить одни и те же функции управления на разных страницах, не пытаясь выдумать, какую страницу Добавить.