#asp.net #dynamic-controls
#asp.net #динамические элементы управления
Вопрос:
Я создал приложение Windows Forms на C #, которое позволяет пользователям добавлять элементы управления на вкладку, размер которой они могут изменять. Теперь я хочу сделать то же самое только в ASP.NET .
Мне удалось добавить элементы управления динамически, следуя этому руководству. Я использую jQuery UI, чтобы сделать их изменяемыми по размеру и перетаскиваемыми. Проблема, с которой я столкнулся, заключается в том, что при добавлении нового элемента управления все остальные возвращаются к своему исходному положению и размеру.
Я предполагаю, что мне нужно сохранить их положение и размер и применить их к вновь созданному элементу управления в LoadViewState. Есть ли способ, которым я могу просмотреть эти атрибуты из исходного кода? Мне удалось получить эту информацию с помощью Javascript, но я не знаю, как перенести ее в исходный код.
Может кто-нибудь, пожалуйста, указать мне правильное направление? Заранее благодарю.
Комментарии:
1. Используете ли вы ajax (панели обновления) для связи с сервером или делаете полную публикацию в конце страницы?
2. В настоящее время я готовлю полный ответный пост.
3. Можете ли вы опубликовать свой html / asp.net код и javascript?
Ответ №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 не пришлось бы беспокоиться о поддержании состояния.