Динамически добавлять элементы управления ASP.NET на веб-страницу - PullRequest
1 голос
/ 03 апреля 2019

Я довольно новичок в веб-разработке, и моя цель - добавить метку и элемент управления для текстового поля или динамически раскрыться на странице, без перепрограммирования страницы и повторной публикации приложения.Например, через модуль администратора у меня есть возможность добавить или удалить поле на странице ввода в приложении.Например, эта страница ввода будет иметь 4 поля, но новое требование требует, чтобы я добавил 5-е поле, будь то раскрывающийся список, метка со связанным текстовым полем, флажок и т. Д.

Я гуглили нашел эту ссылку: Динамическое добавление элементов управления ASP.Net , что является началом.

Из того, что я обнаружил, мне кажется, что мне нужно сгенерировать это с помощью функции приложения, напр.CreateTextBoxControl (....) и иметь заполнители на странице или любым другим способом.

Я бы предпочел, чтобы MVC использовал Restful WEB API с хранимыми процедурами SQL Server.

Я буду продолжатьисследовать это, но любая помощь будет высоко ценится.

Спасибо.

1 Ответ

0 голосов
/ 03 апреля 2019

Создание динамического элемента управления и его подключение

  1. В обозревателе решений щелкните Показать все файлы, чтобы отобразить список файлов, связанных с WebForm1.aspx.Откройте файл WebForm1.aspx.cs.
  2. Объявите элементы управления TextBox в файле .cs (code-behind).Также объявите переменную для существующего элемента формы в файле .aspx.Обновите объявления, следуя объявлению для класса WebForm1:

    открытый класс WebForm1: System.Web.UI.Page {protected System.Web.UI.WebControls.Label Label1;защищенный System.Web.UI.WebControls.Label Label2;защищенный System.Web.UI.WebControls.Label Label3;защищенный System.Web.UI.WebControls.Label Label4;protected System.Web.UI.WebControls.Button Button1;

    // Добавлено вручную для доступа к форме.protected System.Web.UI.HtmlControls.HtmlForm Form1;

    // Добавлено вручную;создаст экземпляр в OnInit.защищенный System.Web.UI.WebControls.TextBox TextBox1;protected System.Web.UI.WebControls.TextBox TextBox2;

Объявления TextBox вводятся вручную, как если бы TextBox перетаскивался из панели инструментов в .aspx.стр.Однако в этом случае вы создаете элементы управления динамически.

Добавить код для динамического создания элементов управления TextBox.Элементы управления создаются при каждом запуске страницы.Лучшее место для этого - функция OnInit, предоставляемая классом WebForm1.

Найдите функцию OnInit.Разверните код, помеченный комментарием «Код, сгенерированный конструктором веб-форм».Измените функцию OnInit так, чтобы она выглядела так, как показано в следующем коде:

override protected void OnInit(EventArgs e)
{
    // Create dynamic controls here.
    // Use "using System.Web.UI.WebControls;"
    TextBox1 = new TextBox();
    TextBox1.ID = "TextBox1";
    TextBox1.Style["Position"] = "Absolute";
    TextBox1.Style["Top"] = "25px";
    TextBox1.Style["Left"] = "100px";
    Form1.Controls.Add(TextBox1);

    TextBox2 = new TextBox();
    TextBox2.ID = "TextBox2";
    TextBox2.Style["Position"] = "Absolute";
    TextBox2.Style["Top"] = "60px";
    TextBox2.Style["Left"] = "100px";
    Form1.Controls.Add(TextBox2);

    this.TextBox1.TextChanged += new System.EventHandler(this.TextBox_TextChanged);
    this.TextBox2.TextChanged += new System.EventHandler(this.TextBox_TextChanged);

    // 
    // CODEGEN: This call is required by the ASP.NET Web Form Designer.
    // 
    InitializeComponent();
    base.OnInit(e);
}

Этот код динамически создает два элемента управления TextBox, устанавливает их идентификаторы и позиции, а затем привязывает их к формеКонтролирует сбор.Код также связывает события TextChanged текстовых полей с обработчиком (TextBox_TextChanged).

Кроме установки положения TextBox программным способом и его привязки к коллекции элементов управления формы, вы можете добавить элементы управления панели веб-форм в.aspx и привязать текстовые поля к полям в функции OnInit, как показано ниже:

TextBox1 = new TextBox();
    TextBox1.ID = "TextBox1";
//Form1.Controls.Add(TextBox1);
    Panel1.Controls.Add(TextBox1);

Примечание. При создании динамических элементов управления в веб-форме элементы управления должны быть созданы.и добавляется в коллекцию элементов управления либо в событиях OnInit, либо в событиях Page_Load.В противном случае элементы управления работают неожиданно.

Инициализируйте свойство Text и стили для текстовых полей.Измените существующую функцию Page_Load следующим образом:

private void Page_Load (отправитель объекта, System.EventArgs e) {if (! IsPostBack) {// Установить начальные свойства для текстовых полей.TextBox1.Text = "TextBox1";TextBox2.Text = "TextBox2";}}

Начальное значение текстовых полей (if (! IsPostBack)) устанавливается один раз.Эта информация поддерживается интерфейсом IPostBackDataHandler для текстовых полей, поэтому нет необходимости сбрасывать значение для последующих записей.

Предоставить обработчик для событий TextChanged элемента управления TextBox.Добавьте следующий код после тела функции Page_Load:

private void TextBox_TextChanged (отправитель объекта, System.EventArgs e) {TextBox txtBoxSender = (TextBox) отправитель;string strTextBoxID = txtBoxSender.ID;

switch(strTextBoxID)
{
    case "TextBox1":
        Label3.Text = "TextBox1 text was changed";
        break;
    case "TextBox2":
        Label4.Text = "TextBox2 text was changed";
        break;
}

}

Этот код проверяет, какой элемент управления вызвал событие, а затем сообщает об этом пользователюиспользуя соответствующий элемент управления Label.Обратите внимание, что эта функция обрабатывает событие TextChanged для обоих динамически создаваемых элементов управления TextBox.По умолчанию AutoPostBack имеет значение false для элементов управления TextBox.Следовательно, изменение текста в элементах управления не вызывает PostBack на сервере.Тем не менее, когдаКнопка Submit нажимается для отправки формы на сервер, запускаются события TextChanged для элементов управления TextBox и вызывается эта функция.

https://support.microsoft.com/en-us/help/317794/how-to-dynamically-create-controls-in-asp-net-by-using-visual-c-net

...