Использование контрола HtmlEditor. Часть 2

Часть 1. Использование HtmlEditor на страницах/контролах SharePoint
Часть 2. Создание своего контрола на базе HtmlEditor
Часть 3. Варианты использование HtmlEditor
Исходные коды демонстрационного проекта

Свой редактор на базе HtmlEditor

Разработчики Microsoft не стали никоим образом запечатывать класс HtmlEditor, чем мы и воспользуемся. Здесь я просто покажу пример инкапсуляции необходимых операций для обеспечения работоспособности контрола.

Процедура стандартная: создаем класс, наследуем его от HtmlEditor и переопределяем метод OnInit для инкапсуляции необходимых операций:

  1. using System;
  2. using Microsoft.SharePoint.Publishing.WebControls;
  3. using Microsoft.SharePoint.WebControls;
  4.  
  5. namespace ZhukBlogUsingHtmlEditor
  6. {
  7.   public class ZhukHtmlEditor : HtmlEditor
  8.   {
  9.     protected override void OnInit(EventArgs e)
  10.     {
  11.       base.OnInit(e);
  12.       var ribbon = SPRibbon.GetCurrent(Page);
  13.       if (ribbon != null)
  14.       {
  15.         ribbon.CommandUIVisible = true;
  16.         ribbon.TrimById("Ribbon.EditingTools.CPEditTab.Layout");
  17.         ribbon.TrimById("Ribbon.EditingTools.CPEditTab.EditAndCheckout");
  18.       }
  19.  
  20.       Field = new RichHtmlField
  21.       {
  22.         ControlMode = SPControlMode.Edit,
  23.         EnableViewState = true,
  24.         AllowReusableContent = false,
  25.         MinimumEditHeight = "300px",
  26.         HasInitialFocus = true,
  27.         AllowInsert = true
  28.       };
  29.     }
  30.   }
  31. }

Немного улучшений

Не хватает стандартному HtmlEditor возможности валидации, т.е. нельзя прикрутить какой-нибудь RequiredFieldValidator. Я исправил это недоразумение, указав свойства Html в атрибуте ValidationProperty. Для демонстрации сделанного я переопределил свойство Html следующим образом:

  1. public new string Html
  2. {
  3.   get
  4.   {
  5.     return base.Html.Replace("IBM", "Microsoft");;
  6.   }
  7.   set
  8.   {
  9.     base.Html = value;
  10.   }
  11. }

На страницу ZhukEditor.aspx я добавил валидатор, панель и кнопку, которая будет заполнять панель содержимым редактора, а также послужит нам для проверки работы валидатора. Получилось вот так (часть кода страницы):

  1. <%@ Register TagPrefix="ZhukBlog" Namespace="ZhukBlogUsingHtmlEditor" Assembly="$SharePoint.Project.AssemblyFullName$" %>
  2. <asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
  3.   <ZhukBlog:ZhukHtmlEditor ID="OverridedEditor" runat="server">
  4.   </ZhukBlog:ZhukHtmlEditor>
  5.   <asp:RequiredFieldValidator ID="OverridedEditorValidator" runat="server" ControlToValidate="OverridedEditor"
  6.     ErrorMessage="Give me the text!"></asp:RequiredFieldValidator>
  7.   <asp:Button ID="PostButton" runat="server" Text="PostMe" OnClick="PostButtonClick" />
  8.   <asp:Panel ID="OverridedEditorResult" runat="server">
  9.   </asp:Panel>
  10. </asp:Content>

Результат

В результате мы получили редактор форматированного текста, использование которого не обременено написанием дополнительного кода, а также с возможность валидации.


Поделиться

Коментарии