Использование контрола HtmlEditor. Часть 3
Часть 1. Использование HtmlEditor на страницах/контролах SharePoint
Часть 2. Создание своего контрола на базе HtmlEditor
Часть 3. Варианты использование HtmlEditor
Исходные коды демонстрационного проекта
Редактор в модальном окне
Для начала пример с модальным окном. Здесь нам понадобится jQuery (исключительно для удобства, можно обойтись и без этой библиотеки). Сценарий применения следующий: На странице есть простая кнопка/ссылка по нажатии на которую, вызывается модальное окно, пользователь вводит данные и окно закрывается. Основная страница не перегружена "тяжелым" контролом, коим является HtmlEditor.
Вызов модального окна - одно удовольствие и минимум кода:
- function GetHtmlContent() {
- var options = {
- url: "/_layouts/ZhukBlogUsingHtmlEditor/ModalEditor.aspx",
- title: "HtmlEditor",
- width: 500,
- dialogReturnValueCallback: editorCallback
- }
- SP.UI.ModalDialog.showModalDialog(options);
- }
-
- function editorCallback(result, target) {
- if (result == 1) { //Пользователь нажал кнопку "ОК"
- $("#HtmlModalResult").html(target);
- $("#<%= HTMLSource.ClientID %>").html(target);
- } else { //Пользователь отменил ввод
- alert("Canceled");
- }
- }
Здесь ничего сложного. Страница, открываемая в диалоговом окне содержит стандартный HtmlEditor (подробнее читай часть 1). А вся хитрость заключается в получении HTML-кода из редактора на стороне клиента без вызова постбэка. HtmlEditor хранит этот HTML-код в поле, ID которого получается путем конкатенации ClientID самого контрола и "_displayContent". Таким образом возвращать значение вызывающей странице мы будем вот таким кодом (JavaScript):
- function ReturnValue() {
- window.frameElement.commonModalDialogClose(1, $('#<%= Editor.ClientID %>_displayContent').html());
- }
Весь код я здесь не привожу, так как исходные коды демонстрационного проекта прилагаются.
UIVersion = 3
Теперь я покажу как обеспечить совместимость с предыдущей версией интерфейса, доставшейся от SharePoint 2007. Просто так наш HtmlEditor не заработает. Для работы ему не хватает стилей из forms.css. Но и эта проблема решается путем добавления на вызывающую страницу следующего кода:
- protected override void OnPreRender(EventArgs e)
- {
- base.OnPreRender(e);
- if (SPContext.Current.Web.UIVersion == 3)
- CssRegistration.Register("forms.css");
- }
Теперь все работает при любых обстоятельствах: