Динамические элементы управления в ASP.NET

#asp.net #dynamic-controls

#asp.net #динамические элементы управления

Вопрос:

Я создал приложение Windows Forms на C #, которое позволяет пользователям добавлять элементы управления на вкладку, размер которой они могут изменять. Теперь я хочу сделать то же самое только в ASP.NET .

Мне удалось добавить элементы управления динамически, следуя этому руководству. Я использую jQuery UI, чтобы сделать их изменяемыми по размеру и перетаскиваемыми. Проблема, с которой я столкнулся, заключается в том, что при добавлении нового элемента управления все остальные возвращаются к своему исходному положению и размеру.

Я предполагаю, что мне нужно сохранить их положение и размер и применить их к вновь созданному элементу управления в LoadViewState. Есть ли способ, которым я могу просмотреть эти атрибуты из исходного кода? Мне удалось получить эту информацию с помощью Javascript, но я не знаю, как перенести ее в исходный код.

Может кто-нибудь, пожалуйста, указать мне правильное направление? Заранее благодарю.

[РЕДАКТИРОВАТЬ] Спасибо за ваши ответы. Вот код: HTML C#

Комментарии:

1. Используете ли вы ajax (панели обновления) для связи с сервером или делаете полную публикацию в конце страницы?

2. В настоящее время я готовлю полный ответный пост.

3. Можете ли вы опубликовать свой html / asp.net код и javascript?

4.HTML C#

Ответ №1:

Вам необходимо сохранить положения и размеры элементов управления и передавать эти значения на сервер при нажатии кнопки Добавить элемент управления.

У вас есть несколько вариантов того, как это сделать.

  • Строка запроса
  • Скрытые поля формы ( <input type="hidden"> )
  • Скрытое текстовое поле (скрытое с помощью style="display: none;" )

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

Комментарии:

1. Просто чтобы расширить данный ответ, вам нужно было бы объявить свои скрытые поля как серверные элементы управления, а затем вставить в них значения с помощью JavaScript на клиенте при перемещении объекта, а затем, когда произойдет обратная передача, значения вашего местоположения будут доступны на стороне сервера. Здесь у вас есть несколько вариантов: одно суперскрытое поле, которое содержит все значения вашего местоположения, закодированные каким-либо образом, или скрытое поле для каждого атрибута для каждого элемента управления, добавленного на страницу.

2. @pb Не обязательно. Доступ к скрытым полям формы, которые не являются серверными элементами управления, может быть получен с помощью Request.Params кода, заданного name свойством. На самом деле я обнаружил, что проще использовать скрытое поле несерверного элемента управления, если значение будет задано с помощью javascript.

3. Я добавил серверное текстовое поле, в котором я сохранил конфигурацию элементов управления с помощью JavaScript. Но я застрял на том, когда применять это к элементам управления. Я должен сделать это на LoadViewState , но я могу получить доступ только к текстовому полю, начинающемуся с OnPreLoad . Я не мог понять, как использовать Request.Params .

4. Сделайте это при загрузке страницы. Возможно, вам потребуется обернуть это в if(Page.IsPostBack) инструкцию.

5. @Kyle — причина, по которой я предложил серверный элемент управления, заключалась в том, чтобы значения сохранялись при обратной передаче, таким образом, @feelshift не пришлось бы беспокоиться о поддержании состояния.