Я создаю веб-часть для SharePoint. У меня есть пользовательская часть редактора, которая переопределяет методы SyncChanges() и ApplyChanges() (среди прочего).Порядок вызова методов CreateChildControls() и ApplyChanges() в веб-части SharePoint
Проблема заключается в том, что при нажатии кнопки «ОК» в режиме редактирования страница переключается в режим просмотра, но данные (propeties), которые были изменены в редакторе и сохранены в методе ApplyChanges(), не обновляются. Я снова должен «ввести страницу» (перезагрузить без POSTing данных снова), чтобы увидеть изменение, которое было сделано.
Я отлаживал его и выяснял, что он делает - после нажатия OK в режиме редактирования сначала вызывается WebPart.CreateChildControls(), а EditorPart.ApplyChanges(). Таким образом, данные были обновлены, но отображались не обновленные данные.
Я понял что-то еще в этом поведении: Добавление одного конкретного элемента управления в мой WebPart в CreateChildControls() вызывает неправильный порядок вызова WebPart.CreateChildControls() и EditorPart.ApplyChanges(). В моем случае это вызывает добавление элементов управления WebDataTree или UltraWebTree (из Infragistics), но это также может случиться с обычным текстовым блоком ASP.NET (как описано здесь по этой же проблеме подробнее: ASP.net forum thread).
Итак, если я добавлю дерево, CreateChildControls() вызывается первым, а ApplyChanges - вторым, поэтому это не актуально. Я должен обновиться, чтобы увидеть изменения, внесенные мной в часть редактора.
Если я комментарий, добавив дерево в коллекцию элементов управления, ApplyChanges называется первым, и все в порядке (за исключением мне нужно это дерево :)) ...
Кто-нибудь знает, что может вызвать это странное поведение?
Нет ответа, просто подтверждение того, что вы не только один собирается, хотя эту боль. После нескольких часов попыток бороться с этой конкретной проблемой я сдал и просмотрел элементы управления внутри самой веб-части, когда находится в режиме редактирования. – Tom
Иди в это. Пришлось переместить код в OnPreRender. –