Веб-часть Sharepoint OnPreRender PostBack Динамические текстовые поля недоступны в обработчике кнопок - PullRequest
0 голосов
/ 13 мая 2010

У меня есть пользовательская веб-часть, которая расширяет System.Web.UI.WebControls.WebPart и реализует EditorPart.

У меня есть все статические элементы управления, добавляемые в переопределенный метод CreateChildControls, поскольку я знаю, что это делает их постоянными в PostBacks.

Однако у меня есть несколько TextBox, добавляемых в переопределенный метод OnPreRender, потому что фактические TextBox, которые я добавляю, зависят от данных, возвращаемых из веб-службы, которую я вызываю в OnPreRender. Веб-сервис должен быть вызван в OnPreRender, потому что мне нужны некоторые значения свойств, которые установлены в EditorPart. Если я встрою эту логику в метод CreateChildControls, очевидно, что данные не будут доступны в первом PostBack после применения редактирования, поскольку события PostBack восстанавливаются после CreateChildControls. Это означает, что страница должна быть опубликована дважды перед обновлением данных, и это просто грязно.

Как сделать так, чтобы эти текстовые поля вместе с введенными ими текстовыми значениями были постоянными в PostBacks, чтобы я мог получить к ним доступ в обработчике кнопок?

Спасибо за любую помощь, Matt

Ответы [ 2 ]

0 голосов
/ 04 ноября 2010

FWIW, Вы можете хранить значения непосредственно в ViewState, не имея доступа к нему через прокси внутри элемента управления TextBox. В этом фрагменте я обернул доступ к viewstate внутри простого старого свойства:

public string WebServiceResult
{
  get
  {
    string text = (string) ViewState["WebServiceResult"];
    if (text != null)
       return text;
    else
       return string.Empty;
  }
  set
  {
    ViewState["WebServiceResult"] = value;
  }
}
0 голосов
/ 28 мая 2010

Это сработало для меня:

  • Добавить «скрытый» TextBox в CreateChildControls (я достиг этого с шириной = 0; visible = false и enabled = false не работают)
  • В PreRender проверьте любые значения, введенные в динамическом TextBox (-ах) для передачи параметров в вызов данных (в моем случае это Web-сервис), это будет происходить при разборе значения в «скрытом» TextBox (объяснено позже)
  • После вызова данных добавьте TextBox (ы), обеспечивающий повторное заполнение любых предыдущих значений, введенных перед последней обратной передачей (путем анализа «скрытого» TextBox Text)
  • Наконец, добавьте атрибут к кнопке с именем "onClick" и установите значение для функции javascript, которая получает значения TextBoxes (используя document.getElementById и передает TextBox.ClientID для каждого TextBox) и создает форматированную строку для сохранить идентификатор и значение TextBox в «скрытом» TextBox.

Поскольку в CreateChildControls добавлен «скрытый» TextBox, его значение восстанавливается и к нему можно получить доступ в PostBack.

Надеюсь, это поможет кому-то там, я знаю, что я сжег некоторое время на этом.

...