Обработка обратной передачи в веб-части в Sharepoint

Я инициализирую GridView, текстовое поле и кнопку с помощью кода для веб-части в CreateChildControls ()

Вышеупомянутые элементы управления объявлены как переменные класса, но инициализируются позже.

Далее я дал обработчик нажатия кнопки. Функция обработчика должна работать как поиск - выполнять некоторые операции с содержимым, введенным в текстовое поле, загружать результаты в Gridview, отображать Gridview.

Когда я ввожу что-то в текстовое поле и нажимаю кнопку, те же элементы управления загружаются снова, и содержимое, введенное в текстовое поле, теряется. Я пробовал ViewState () и ViewState (), но безрезультатно. Сетка не отображается, потому что моя логика пропускает попытки привязать ее, поскольку правильная строка поиска не была доступна.

Мои вопросы: 1) Где / как я могу получить обратную передачу значений из текстового поля? 2) Будет ли иметь смысл заполнять GridView в PreRender () или обработка событий будет происходить после PreRender ()?

РЕДАКТИРОВАТЬ: похоже, что обработчик событий не вызывается.

Dim btnClickHandler = New EventHandler(AddressOf SetSearchParameter)
AddHandler srchBtn.Click, btnClickHandler

верно?

РЕДАКТИРОВАТЬ: Я переделал весь код с 0. Теперь он работает.


person Vid L    schedule 28.09.2010    source источник
comment
Обработчик нажатия кнопки также выполняется внутри CreateChildControls ()   -  person Vid L    schedule 28.09.2010


Ответы (2)


вы должны иметь возможность ссылаться на значения элементов управления в обработчике событий для нажатия кнопки, в зависимости от того, как создать их статические / динамические. (текстовое поле) Page.FindControl ('controlname'). value в обработчике событий для нажатия кнопки.

э ... this.findcontrol.

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

person brian brinley    schedule 28.09.2010
comment
Согласно stackoverflow. com / questions / 1648447 / и многих других ресурсов, CreateChildControls () вызывается перед обработкой события Postback - не вызовет ли вместо этого Page.FindControl () новый элемент управления? Я пытался, но до сих пор не могу получить значения. - person Vid L; 29.09.2010
comment
перечитав ваш комментарий, я не использовал метод, который вы используете для создания обработчика событий. Я всегда создавал свой метод и привязал к нему событие щелчка. Ниже приведен пример кода простого обработчика событий для динамически создаваемого элемента управления. - person brian brinley; 29.09.2010
comment
Кнопка submitButton = (Кнопка) this.FindControl (отправить); submitButton.Click + = новый обработчик событий (SubmitContactForm); и вот метод submitContactForm protected void SubmitContactForm (object sender, EventArgs e) {....} внутри метода, который я использовал, в моем случае это были поля динамической формы, которые, как я знал, были метками. // получить объект имени элемента управления ctrl = FindControl (controlName); строка controlValue = ((TextBox) ctrl) .Text; - person brian brinley; 29.09.2010
comment
Спасибо за это. Но внезапно мои пути, кажется, теперь работают! Я удалил весь код и начал заново - может, еще что-то пропустил. - person Vid L; 30.09.2010

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

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

  2. Я бы предложил использовать OnPreRender для заполнения вашей сетки. К тому времени ваши элементы управления должны иметь свои значения, заполненные ViewState.

person Kit Menke    schedule 28.09.2010
comment
Я уже упоминал об этом раньше, но до сих пор не ясно. Проверьте мой комментарий к следующему ответу. 1) ViewState даже для динамических элементов управления? 2) Я хочу, чтобы он был привязан только к Postback - можно ли проверять Page.IsPostBack в OnPreRender? - person Vid L; 29.09.2010
comment
Да на оба вопроса. Вы добавите текстовое поле и кнопку в CreateChildControls. Затем в OnPreRender вы можете проверить IsPostBack (и что ваш textbox.Text имеет значение), а затем добавить свою сетку / привязку данных. - person Kit Menke; 29.09.2010
comment
Хорошо спасибо! Теперь я использую свой собственный флаг - изменение значений Personalizable также вызывает обратную передачу, и некоторые значения не всегда могут быть установлены в таких случаях - person Vid L; 30.09.2010
comment
Обратите внимание, что IsPostBack немного бесполезен, если веб-часть просто добавлена ​​на панель, потому что логика добавления элемента управления происходит как обратная публикация страницы. - person Roman; 12.07.2012