Toolbar in ASP.NET MVC Rich Text Editor Control

6 Mar 202524 minutes to read

The Syncfusion ASP.NET MVC Rich Text Editor control provides a versatile and powerful toolbar to enhance your text editing experience. The toolbar contains a variety of formatting, styling, and editing tools, allowing users to create and modify content efficiently.

Tools

Default Toolbar Items

By default, the ASP.NET MVC Rich Text Editor displays the following toolbar items:

Bold , Italic , Underline , | , Formats , Alignments , Blockquote, OrderedList , UnorderedList , | , CreateLink , Image , | , SourceCode , Undo , Redo

These default items cover essential text editing features, such as text formatting, lists, alignment, and linking.

Available Toolbar Items

The following table shows the list of available tools in the Rich Text Editor’s toolbar.

The order of items in the toolbar can be customized to meet your application’s requirements. If no specific order is set, the editor will render the above default toolbar items. Below is a list of all available toolbar items in the Rich Text Editor.

Text formatting

It provides tools for applying text styles such as bold, italic, underline, strike-through, and more to modify the appearance of the text.

Name Icons Summary Initialization
Bold Bold icon Text that is thicker and darker than usual. toolbarSettings: { items: [‘Bold’]}
Italic Italic icon Shows a text that is leaned to the right. toolbarSettings: { items: [‘Italic’]}
Underline Underline icon The underline is added to the selected text. toolbarSettings: { items: [‘Underline’]}
StrikeThrough StrikeThrough icon Apply double line strike through formatting for the selected text. toolbarSettings: { items: [‘StrikeThrough’]}
ClearFormat ClearFormat icon The clear format tool is useful to remove all formatting styles (such as bold, italic, underline, color, superscript, subscript, and more) from currently selected text. As a result, all the text formatting will be cleared and return to its default formatting styles. toolbarSettings: { items: [‘ClearFormat’]}
Blockquote Blockquote icon Blockquotes visually highlight important text within an editor, emphasizing key information or quotations. toobarSettings: { items: [‘Blockquote’]}
SubScript SubScript icon Makes the selected text as subscript (lower). toolbarSettings: { items: [‘SubScript’]}
SuperScript SuperScript icon Makes the selected text as superscript (higher). toolbarSettings: { items: [‘SuperScript’]}
LowerCase LowerCase icon Change the case of selected text to lower in the content. toolbarSettings: { items: [‘LowerCase’]}
UpperCase UpperCase icon Change the case of selected text to upper in the content. toolbarSettings: { items: [‘UpperCase’’]}

Font & styling

Tools in this section allow users to customize font properties such as font family, size, color, background color, and paragraph formatting.

Name Icons Summary Initialization
FontName FontName icon Defines the fonts that appear under the Font Family DropDownList from the Rich Text Editor’s toolbar. toolbarSettings: { items: [‘FontName’]}
FontSize FontSize icon Defines the font sizes that appear under the Font Size DropDownList from the Rich Text Editor’s toolbar. toolbarSettings: { items: [‘FontSize’]}
FontColor FontColor icon Specifies an array of colors can be used in the colors popup for font color. toolbarSettings: { items: [‘FontColor’]}
BackgroundColor BackgroundColor icon Specifies an array of colors can be used in the colors popup for background color. toolbarSettings: { items: [‘BackgroundColor’]}
Formats (Paragraph, Headings) Format icon An Object with the options that will appear in the Paragraph Format dropdown from the toolbar. toolbarSettings: { items: [‘Formats’]}

Alignment

This section provides alignment options for the text or content, allowing users to justify text or align it to the left, center, or right.

Name Icons Summary Initialization
Alignment Alignment icon Align the content with left, center, and right margin. toolbarSettings: { items: [‘Alignments’]}
JustifyLeft JustifyLeft icon Allows each line to begin at the same distance from the editor’s left-hand side. toolbarSettings: { items: [‘JustifyLeft’]}
JustifyCenter JustifyCenter icon There is an even space on each side of each line since the text is not aligned to the left or right margins. toolbarSettings: { items: [‘JustifyCenter’]}
JustifyRight JustifyRight icon Allows each line to end at the same distance from the editor’s right-hand side. toolbarSettings: { items: [‘JustifyRight’]}
JustifyFull JustifyFull icon The text is aligned with both right and left margins. toolbarSettings: { items: [‘JustifyFull’]}

Lists & indentation

Tools here allow users to create ordered and unordered lists, change the list style, and adjust indentation levels for improved document structure.

Name Icons Summary Initialization
OrderedList OrderedList icon Create a new list item(numbered). toolbarSettings: { items: [‘OrderedList’]}
UnorderedList UnorderedList icon Create a new list item(bulleted). toolbarSettings: { items: [‘UnorderedList’]}
NumberFormatList NumberFormatList icon Allows to create list items with various list style types(numbered). toolbarSettings: { items: [‘NumberFormatList’]}
BulletFormatList BulletFormatList icon Allows to create list items with various list style types(bulleted). toolbarSettings: { items: [‘BulletFormatList’]}
Indent Indent icon Allows to increase the indent level of the content. toolbarSettings: { items: [‘Indent’]}
Outdent Outdent icon Allows to decrease the indent level of the content. toolbarSettings: { items: [‘Outdent’]}

This section provides tools for inserting and managing hyperlinks within the content. Users can create new links or modify existing ones to enhance document navigation and interactivity.

Name Icons Summary Initialization
Hyperlink Hyperlink icon Creates a hyperlink to a text or image to a specific location in the content. toolbarSettings: { items: [‘CreateLink’]}
InsertLink InsertLink icon Allows users to add a link to a particular item. toolbarSettings: { items: [‘InsertLink’]}

The link quicktoolbar provides tools to manage hyperlinks in the Rich Text Editor, allowing users to add, edit, or remove links from selected text or images directly within the editor.

Name Icons Summary Initialization
OpenLink OpenLink icon To open the URL link that is attached to the selected text. quickToolbarSettings: { link: [‘OpenLink’]}
EditLink EditLink icon Allows you to change the URL that has been attached to a specific item. quickToolbarSettings: { link: [‘EditLink’]}
RemoveLink RemoveLink icon Allows you to remove the applied link from the selected item. quickToolbarSettings: { link: [‘RemoveLink’]}

Images

This section contains the primary tool for inserting images into the editor.

Name Icons Summary Initialization
Insert Image Images icon Inserts an image from an online source or local computer. toolbarSettings: { items: [‘Image’]}
Image quicktoolbar items

The image quicktoolbar offers a set of tools to edit images inserted in the Rich Text Editor. It allows users to modify image properties, including alignment, size, alternate text, and links, enhancing image management in the content.

Name Icons Summary Initialization
Replace Image Replace icon Replace the selected image with another image. quickToolbarSettings: { image: [‘Replace’]}
Align Image Alignment icon The image can be aligned to the right, left, or center. quickToolbarSettings: { image: [‘Align’]}
Remove Image Remove icon Allows to remove the selected image from the editor. quickToolbarSettings: { image: [‘Remove’]}
OpenImageLink OpenImageLink icon Opens the link that is attached to the selected image. quickToolbarSettings: { image: [‘OpenImageLink’]}
EditImageLink EditImageLink icon Allows to edit the link that is attached to the selected image. quickToolbarSettings: { image: [‘EditImageLink’]}
RemoveImageLink RemoveImageLink icon Removes the link that is attached to the selected image. quickToolbarSettings: { image: [‘RemoveImageLink’]}
Display Display icon Allows you to choose whether an image should be shown inline or as a block. quickToolbarSettings: { image: [‘Display’]}
AltText AltText icon To display image description when an image on a Web page cannot be displayed. quickToolbarSettings: { image: [‘AltText’]}
Dimension Dimension icon Allows you to customize the image’s height and width. quickToolbarSettings: { image: [‘Dimension’]}

Tables

This section offers the main tool for creating tables within the content.

Name Icons Summary Initialization
CreateTable CreateTable icon Create a table with defined columns and rows. toolbarSettings: { items: [‘CreateTable’]}
Table quicktoolbar items

The table quicktoolbar provides options for table editing within the Rich Text Editor. Users can insert or remove rows and columns, merge or split cells, and access table properties for easier table management and customization.

Name Icons Summary Initialization
RemoveTable RemoveTable icon Removes the selected table and its contents. quickToolbarSettings: { table: [‘TableRemove’]}
TableHeader TableHeader icon Allows you to add a table header. quickToolbarSettings: { table: [‘TableHeader’]}
TableColumns TableColumns icon Shows the dropdown to insert a column or delete the selected column. quickToolbarSettings: { table: [‘TableColumns’]}
TableRows TableRows icon Shows the dropdown to insert a row ors delete the selected row. quickToolbarSettings: { table: [‘TableRows’]}
TableCellHorizontalAlign TableCellHorizontalAlign icon Allows the table cell content to be aligned horizontally. quickToolbarSettings: { table: [‘TableCellHorizontalAlign’]}
TableCellVerticalAlign TableCellVerticalAlign icon Allows the table cell content to be aligned vertically. quickToolbarSettings: { table: [‘TableCellVerticalAlign’]}
TableEditProperties TableEditProperties icon Allows you to change the table width, padding, and cell spacing styles. quickToolbarSettings: { table: [‘TableEditProperties’]}

Undo & redo

These tools allow users to easily undo or redo any changes made within the editor to restore or repeat previous actions.

Name Icons Summary Initialization
Undo Undo icon Allows to undo the actions. toolbarSettings: { items: [‘Undo’]}
Redo Redo icon Allows to redo the actions. toolbarSettings: { items: [‘Redo’]}

Other tools

This section contains miscellaneous tools such as full-screen mode, print, preview, source code editing, and clearing all styles from text.

Name Icons Summary Initialization
FullScreen FullScreen icon Stretches the editor to the maximum width and height of the browser window. toolbarSettings: { items: [‘FullScreen’]}
Maximize Maximize icon Stretches the editor to the maximum width and height of the browser window. toolbarSettings: { items: [‘Maximize’]}
Minimize Minimize icon Shrinks the editor to the default width and height. toolbarSettings: { items: [‘Minimize’]}
Preview Preview icon Allows to see how the editor’s content looks in a browser. toolbarSettings: { items: [‘Preview’]}
InsertCode InsertCode icon Represents preformatted text which is to be presented exactly as written in the HTML file. toolbarSettings: { items: [‘InsertCode’]}
Print Print icon Allows to print the editor content. toolbarSettings: { items: [‘Print’]}
ClearAll ClearAll icon Removes all styles that have been applied to the selected text. toolbarSettings: { items: [‘ClearAll’]}
SourceCode SourceCode icon Rich Text Editor includes the ability for users to directly edit HTML code via “Source View”. If you made any modification in Source view directly, synchronize with Design view. toolbarSettings: { items: [‘SourceCode’]}

How to Enable the Toolbar

The Rich Text Editor toolbar contains a collection of tools such as bold, italic and text alignment buttons that are used to format the content. However, in most integrations, you can customize the toolbar configurations easily to suit your needs.

The Rich Text Editor allows you to configure different types of toolbar using Type field in ToolbarSettings property. The types of toolbar are:

  1. Expand
  2. MultiRow
  3. Scrollable

Expanding the Toolbar

The default mode of the toolbar is Expand, configured through ToolbarSettings with Type: 'Expand'. This mode hides any overflowing toolbar items in the next row, which can viewed by clicking the expand arrow.

@using Syncfusion.EJ2.RichTextEditor

<div style="width:500px; margin:0 auto;">
    @Html.EJS().RichTextEditor("toolbar-types").ToolbarSettings(e => { e.Type(ToolbarType.Expand); e.Items(ViewBag.items);}).Value(ViewBag.value).Render()
</div>
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.value = @"<p>The Syncfudion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.</p><p><b>Key features:</b></p><ul><li><p>Provides &lt;IFRAME&gt; and &lt;DIV&gt; modes.</p></li><li><p>Bulleted and numbered lists.</p></li><li><p>Handles images, hyperlinks, videos, hyperlinks, uploads, etc.</p></li><li><p>Contains undo/redo manager. </p></li></ul><div style='display: inline-block; width: 60%; vertical-align: top; cursor: auto;'><img alt='Sky with sun' src='https://cdn.syncfusion.com/ej2/richtexteditor-resources/RTE-Overview.png' width='309' style='min-width: 10px; min-height: 10px; width: 309px; height: 174px;' class='e-rte-image e-imginline e-rte-drag-image' height='174' /></div>";
        ViewBag.items = new[] { "Bold", "Italic", "Underline", "StrikeThrough",
      "FontName", "FontSize", "FontColor", "BackgroundColor",
      "LowerCase", "UpperCase", "|",
      "Formats", "Alignments", "Blockquote", "OrderedList", "UnorderedList",
      "Outdent", "Indent", "|",
      "CreateLink", "Image", "|", "ClearFormat", "Print",
      "SourceCode", "FullScreen", "|", "Undo", "Redo" };
        return View();
    }
}

Configuring a Multi-row Toolbar

Setting the Type as MultiRow in ToolbarSettings will arrange the toolbar items across multiple rows, displaying all configured toolbar items.

<div style="width:500px; margin:0 auto;">
    @Html.EJS().RichTextEditor("toolbar-types").ToolbarSettings(e => { e.Type(ToolbarType.MultiRow); e.Items(ViewBag.items); }).Value(ViewBag.value).Render()
</div>
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.value = @"<p>The Syncfudion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.</p><p><b>Key features:</b></p><ul><li><p>Provides &lt;IFRAME&gt; and &lt;DIV&gt; modes.</p></li><li><p>Bulleted and numbered lists.</p></li><li><p>Handles images, hyperlinks, videos, hyperlinks, uploads, etc.</p></li><li><p>Contains undo/redo manager. </p></li></ul><div style='display: inline-block; width: 60%; vertical-align: top; cursor: auto;'><img alt='Sky with sun' src='https://cdn.syncfusion.com/ej2/richtexteditor-resources/RTE-Overview.png' width='309' style='min-width: 10px; min-height: 10px; width: 309px; height: 174px;' class='e-rte-image e-imginline e-rte-drag-image' height='174' /></div>";
        ViewBag.items = new[] { "Bold", "Italic", "Underline", "StrikeThrough",
      "FontName", "FontSize", "FontColor", "BackgroundColor",
      "LowerCase", "UpperCase", "|",
      "Formats", "Alignments", "Blockquote", "OrderedList", "UnorderedList",
      "Outdent", "Indent", "|",
      "CreateLink", "Image", "|", "ClearFormat", "Print",
      "SourceCode", "FullScreen", "|", "Undo", "Redo" };
        
        return View();
    }
}

Implementing a Scrollable Toolbar

Setting the Type to Scrollable in ToolbarSettings will display the toolbar items in a single line, enabling horizontal scrolling in the toolbar.

@using Syncfusion.EJ2.RichTextEditor

<div style="width:500px; margin:0 auto;">
    @Html.EJS().RichTextEditor("toolbar-types").ToolbarSettings(e => { e.Type(ToolbarType.Scrollable); e.Items(ViewBag.items);}).Value(ViewBag.value).Render()
</div>
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.value = @"<p>The Syncfudion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.</p><p><b>Key features:</b></p><ul><li><p>Provides &lt;IFRAME&gt; and &lt;DIV&gt; modes.</p></li><li><p>Bulleted and numbered lists.</p></li><li><p>Handles images, hyperlinks, videos, hyperlinks, uploads, etc.</p></li><li><p>Contains undo/redo manager. </p></li></ul><div style='display: inline-block; width: 60%; vertical-align: top; cursor: auto;'><img alt='Sky with sun' src='https://cdn.syncfusion.com/ej2/richtexteditor-resources/RTE-Overview.png' width='309' style='min-width: 10px; min-height: 10px; width: 309px; height: 174px;' class='e-rte-image e-imginline e-rte-drag-image' height='174' /></div>";
        ViewBag.items = new[] { "Bold", "Italic", "Underline", "StrikeThrough",
      "FontName", "FontSize", "FontColor", "BackgroundColor",
      "LowerCase", "UpperCase", "|",
      "Formats", "Alignments", "Blockquote", "OrderedList", "UnorderedList",
      "Outdent", "Indent", "|",
      "CreateLink", "Image", "|", "ClearFormat", "Print",
      "SourceCode", "FullScreen", "|", "Undo", "Redo" };
        return View();
    }
}

Creating a Sticky Toolbar

By default, the toolbar remains fixed at the top of the Rich Text Editor when scrolling. You can customize the position of this sticky toolbar by setting the FloatingToolbarOffset to adjust its offset from the top of the document.

Additionally, you can enable or disable the floating toolbar using the EnableFloating property.

@using Syncfusion.EJ2.RichTextEditor
<div class="control-wrapper">
    <div class="control-section">
        @Html.EJS().RichTextEditor("toolbar-floating").Created("created").Height("720px").ToolbarSettings(e => { e.Type(ToolbarType.Expand).EnableFloating(false); }).Value(ViewBag.value).Render()
    </div>
    <div class="col-lg-4">
        <span id="props"> Enable/Disable Floating: </span>
        @Html.EJS().CheckBox("float").Checked(false).Label("Enable Floating").Change("checkchange").Render()
    </div>
</div>

<script type="text/javascript">
    var defaultRTE;
    function created() {
        defaultRTE = this;
    }
    function checkchange(args) {
        defaultRTE.toolbarSettings.enableFloating = args.checked;
        defaultRTE.dataBind();
    }
</script>
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.value = @"<p>The Syncfudion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.</p><p><b>Key features:</b></p><ul><li><p>Provides &lt;IFRAME&gt; and &lt;DIV&gt; modes.</p></li><li><p>Bulleted and numbered lists.</p></li><li><p>Handles images, hyperlinks, videos, hyperlinks, uploads, etc.</p></li><li><p>Contains undo/redo manager. </p></li></ul><div style='display: inline-block; width: 60%; vertical-align: top; cursor: auto;'><img alt='Sky with sun' src='https://cdn.syncfusion.com/ej2/richtexteditor-resources/RTE-Overview.png' width='309' style='min-width: 10px; min-height: 10px; width: 309px; height: 174px;' class='e-rte-image e-imginline e-rte-drag-image' height='174' /></div>";
        return View();
    }
}

Custom Toolbar Items

The Rich Text Editor allows you to configure your own commands to its toolbar using the ToolbarSettings property. The command can be plain text, icon, or HTML template. The order and the group can also be defined where the command should be included. Bind the action to the command by getting its instance.

This sample shows how to add your own commands to the toolbar of the Rich Text Editor. The “Ω” command is added to insert special characters in the editor. By clicking the “Ω” command, it will show the special characters list, and then choose the character to be inserted in the editor.

The following code snippet illustrates custom tool with tooltip text which will be included in Items field of the ToolbarSettings property.

    var tools = new {
        tooltipText = "Insert Symbol",
            template = "<button class='e-tbar-btn e-btn' tabindex='-1' id='custom_tbar'  style='width:100%'><div class='e-tbar-btn-text rtecustomtool' style='font-weight: 500;'> &#937;</div></button>"
    };
    ViewBag.items = new object[] { "Bold", "Italic", "Underline", "|", "Formats", "Alignments", "OrderedList",
        "UnorderedList", "|", "CreateLink", "Image", "|", "SourceCode", tools
        , "|", "Undo", "Redo"
    };

The Rich Text Editor provides options to customize tool functionalities. Use the undo property to enable or disable the undo function for specific tools. Additionally, the click property lets you configure and bind the onclick event of a tool to a specific method.

This sample demonstrates how to add a custom “Ω” icon to the toolbar. Clicking on this icon opens a dialog where you can insert special characters into the editor. It also shows how to enable undo and redo functionalities.

<div id="rteSection">
    @Html.EJS().RichTextEditor("customtool").Created("created").ToolbarSettings(e => e.Items((object)ViewBag.items)).Value(ViewBag.value).Render()

    @Html.EJS().Dialog("customTbarDialog").Visible(false).Header("Special Characters").Created("onDialogCreate").ZIndex(1000).ShowCloseIcon(false).IsModal(true).CssClass('e-rte-elements').OverlayClick("dialogOverlay").Buttons(e =>
    {
    e.ButtonModel(ViewBag.button).Click("onInsert").Add();
    e.ButtonModel(ViewBag.button1).Click("dialogOverlay").Add();
}).ContentTemplate(@<div id="rteSpecial_char">
        <div class="char_block" title="^">^</div>
        <div class="char_block" title="_">_</div>
        <div class="char_block" title="`">`</div>
        <div class="char_block" title="{">{</div>
        <div class="char_block" title="|">|</div>
        <div class="char_block" title="}">}</div>
        <div class="char_block" title="~">~</div>
        <div class="char_block" title="&nbsp;">&nbsp;</div>
        <div class="char_block" title="¡">¡</div>
        <div class="char_block" title="¢">¢</div>
        <div class="char_block" title="£">£</div>
        <div class="char_block" title="¤">¤</div>
        <div class="char_block" title="¥">¥</div>
        <div class="char_block" title="₹"></div>
        <div class="char_block" title="¦">¦</div>
        <div class="char_block" title="§">§</div>
        <div class="char_block" title="¨">¨</div>
        <div class="char_block" title="©">©</div>
        <div class="char_block" title="ª">ª</div>
        <div class="char_block" title="«">«</div>
        <div class="char_block" title="¬">¬</div>
        <div class="char_block" title="­-"></div>
        <div class="char_block" title="®">®</div>
        <div class="char_block" title="¯">¯</div>
        <div class="char_block" title="°">°</div>
        <div class="char_block" title="±">±</div>
        <div class="char_block" title="²">²</div>
        <div class="char_block" title="³">³</div>
        <div class="char_block" title="´">´</div>
        <div class="char_block" title="µ">µ</div>
        <div class="char_block" title="¶"></div>
        <div class="char_block" title="·">·</div>
        <div class="char_block" title="¸">¸</div>
        <div class="char_block" title="¹">¹</div>
        <div class="char_block" title="º">º</div>
        <div class="char_block" title="»">»</div>
        <div class="char_block" title="¼">¼</div>
        <div class="char_block" title="½">½</div>
        <div class="char_block" title="¾">¾</div>
        <div class="char_block" title="¿">¿</div>
        <div class="char_block" title="À">À</div>
        <div class="char_block" title="Á">Á</div>
        <div class="char_block" title="Â">Â</div>
        <div class="char_block" title="Ã">Ã</div>
    </div>).Render()

</div>
<script>
    var defaultRTE, selection, ranges, dialog;

    function onDialogCreate() {
        dialog = this;
        dialog.element.style.maxHeight = '300px';
    }
    function onInsert() {
        var activeEle = dialog.element.querySelector('.char_block.e-active');
        if (defaultRTE.formatter.getUndoRedoStack().length === 0) {
            defaultRTE.formatter.saveData();
        }
        defaultRTE.executeCommand('insertText', activeEle.textContent);
        defaultRTE.formatter.saveData();
        defaultRTE.formatter.enableUndo(defaultRTE);
        dialogOverlay();
    }
    function dialogOverlay() {
        var activeEle = dialog.element.querySelector('.char_block.e-active');
        if (activeEle) {
            activeEle.classList.remove('e-active');
        }
        dialog.hide();
    }
    function created() {
        defaultRTE = this;
        selection = new ej.richtexteditor.NodeSelection();
        var customBtn = defaultRTE.element.querySelector('#custom_tbar');
        customBtn.onclick = function (e) {
            dialog.element.style.display = '';
            ranges = selection.getRange(document);
            dialog.width = defaultRTE.element.offsetWidth * 0.5;
            dialog.dataBind();
            dialog.show();
            var dialogCtn = document.getElementById('rteSpecial_char');
            dialogCtn.onclick = function (e) {
                var target = e.target;
                var activeEle = dialog.element.querySelector('.char_block.e-active');
                if (target.classList.contains('char_block')) {
                    target.classList.add('e-active');
                    if (activeEle) {
                        activeEle.classList.remove('e-active');
                    }
                }
            };
            customBtn.onclick = function (e) {
                defaultRTE.focusIn();
                dialog.element.style.display = '';
                ranges = selection.getRange(document);
                dialog.width = defaultRTE.element.offsetWidth * 0.5;
                dialog.dataBind();
                dialog.show();
            };
        };
    }
</script>
<style>
    #customTbarDialog #special_char,
    #customTbarDialog .char_block {
        display: inline-block;
    }

    #custom_tbar,
    #custom_tbar div {
        cursor: pointer;
    }

    #rteSpecial_char {
        padding: 15px 0 15px 0;
    }

    #customTbarDialog .char_block.e-active {
        outline: 1px solid #e3165b;
        border-color: #e3165b;
    }

    #customTbarDialog .char_block {
        width: 30px;
        height: 30px;
        line-height: 30px;
        margin: 0 5px 5px 0;
        text-align: center;
        vertical-align: middle;
        border: 1px solid #DDDDDD;
        font-size: 20px;
        cursor: pointer;
        user-select: none;
    }

    #custom_tbar .rtecustomtool {
        font-size: 18px;
    }
</style>
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var tools = new
        {
            tooltipText = "Insert Symbol",
            template = "<button class='e-tbar-btn e-btn' tabindex='-1' id='custom_tbar'  style='width:100%'><div class='e-tbar-btn-text rtecustomtool' style='font-weight: 500;'> &#937;</div></button>"
        };
        ViewBag.items = new object[] { "Bold", "Italic", "Underline", "|", "Formats", "Alignments", "OrderedList",
        "UnorderedList", "|", "CreateLink", "Image", "CreateTable", "|", "SourceCode", tools
        , "|", "Undo", "Redo"
            };
        ViewBag.button = new
        {
            content = "Insert",
            isPrimary = true
        };
        ViewBag.button1 = new
        {
            content = "Cancel"
        };

        ViewBag.value= @"<p>
                The custom command 'insert special character' is configured as the last item of the toolbar.
                Click on the command and choose the special character you want to include from the popup.
            </p>";

        return View();
    }
}

When rendering any control for the custom toolbar, like a dropdown, the focus may be lost, causing it to render outside the Rich Text Editor and triggering a blur event. This can interfere with proper functionalities like cursor focus. To prevent this issue, it is recommended to assign the e-rte-elements class to the control rendered in the custom toolbar.

Enabling and Disabling Toolbar Items

You can use the enableToolbarItem and disableToolbarItem methods to control the state of toolbar items. This methods takes a single item or an array of items as parameter.

You can add the command name Custom to disable the custom toolbar items on source code view and other quick toolbar operations.

Quick Inline toolbar

Quick commands are opened as context-menu on clicking the corresponding element. The commands must be passed as string collection to image, text, link and table attributes of the QuickToolbarSettings property.

Target Element Default Quick Toolbar items
Image ‘Replace’, ‘Align’, ‘Caption’, ‘Remove’, ‘InsertLink’, ‘Display’, ‘AltText’,’Dimension’.
Link ‘Open’, ‘Edit’, ‘UnLink’.
Text null
(Any toolbar items in the Rich Text Editor can be configured here).
table ‘TableHeader’, ‘TableRows’, ‘TableColumns’, ‘BackgroundColor’, ‘-‘, ‘TableRemove’, ‘Alignments’, ‘TableCellVerticalAlign’, ‘Styles’.

Custom tool can be added to the corresponding quick toolbar, using QuickToolbarSettings property.

The below sample demonstrates the option to insert the image to the Rich Text Editor content as well as option to rotate the image through the quick toolbar.

<div class="control-section">
    @Html.EJS().RichTextEditor("inline").Created("onCreated").ToolbarClick("onToolbarClick").InlineMode(e => e.Enable(true).OnSelection(true)).ToolbarSettings(e => e.Items((object)ViewBag.items)).QuickToolbarSettings(e => { e.Image((object)ViewBag.image); }).Value(ViewBag.value).Render()
</div>

<style>
    .e-rte-quick-popup .e-rte-quick-toolbar .e-rotate-left::before {
        content: "\e341";
    }

    .e-rte-quick-popup .e-rte-quick-toolbar .e-rotate-right::before {
        content: "\e354";
    }
</style>
<script>
    function onCreated() {
        defaultRTE = this;
    }
    function onToolbarClick(e) {
        var nodeObj = new ej.richtexteditor.NodeSelection();
        var range = nodeObj.getRange(defaultRTE.contentModule.getDocument());
        var imgEle = nodeObj.getNodeCollection(range)[0];
        var transform;
        if (e.item.tooltipText === 'Rotate Right') {
            transform = (imgEle.style.transform === '') ? 0 :
                parseInt(imgEle.style.transform.split('(')[1].split(')')[0], 10);
            imgEle.style.transform = 'rotate(' + (transform + 90) + 'deg)';
        }
        else if (e.item.tooltipText === 'Rotate Left') {
            transform = (imgEle.style.transform === '') ? 0 :
                Math.abs(parseInt(imgEle.style.transform.split('(')[1].split(')')[0], 10));
            imgEle.style.transform = 'rotate(-' + (transform + 90) + 'deg)';
        }
    }
</script>
public class HomeController : Controller
{

    public ActionResult Index()
    {
        ViewBag.value = @"<p>The Syncfudion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.</p><p><b>Key features:</b></p><ul><li><p>Provides &lt;IFRAME&gt; and &lt;DIV&gt; modes.</p></li><li><p>Bulleted and numbered lists.</p></li><li><p>Handles images, hyperlinks, videos, hyperlinks, uploads, etc.</p></li><li><p>Contains undo/redo manager. </p></li></ul><div style='display: inline-block; width: 60%; vertical-align: top; cursor: auto;'><img alt='Sky with sun' src='https://cdn.syncfusion.com/ej2/richtexteditor-resources/RTE-Overview.png' width='309' style='min-width: 10px; min-height: 10px; width: 309px; height: 174px;' class='e-rte-image e-imginline e-rte-drag-image' height='174' /></div>";
        ViewBag.items = new[] { "Bold", "Italic", "Underline",
            "Formats", "Alignments", "-", "OrderedList", "UnorderedList", "Image",
             "CreateLink" };
        object tools1 = new
        {
            tooltipText = "Rotate Left",
            template = "<button class='e-tbar-btn e-btn' id='roatateLeft'><span class='e-btn-icon e-icons e-rotate-left'></span>"
        };
        object tools2 = new
        {
            tooltipText = "Rotate Right",
            template = "<button class='e-tbar-btn e-btn' id='roatateRight'><span class='e-btn-icon e-icons e-rotate-right'></span>"
        };
        ViewBag.image = new[] {
            "Replace", "Align", "Caption", "Remove", "InsertLink", "OpenImageLink", "-",
             "EditImageLink", "RemoveImageLink", "Display", "AltText", "Dimension",tools1
             , tools2
             };

        return View();
    }

}

See Also