Ссылка на редактор DNN извне как решение DNN

Я создаю модуль DotNetNuke, и мне нужно включить редактор HTML. Однако мои модули находятся в автономном решении, которое xcopy для моей установки DNN (я следую шаблонам проекта Visual Studio для создания модулей). Все примеры кода, которые я видел, ссылаются на текстовый редактор следующим образом:

<%@ Register TagPrefix="dnn" TagName="TextEditor" Src="~/controls/TextEditor.ascx" %>

<dnn:TextEditor ID="txtDescription" runat="server" Width="100%" Height="300px" />

Проблема в том, что, поскольку модули разрабатываются вне DNN, ссылка на TextEditor явно нарушает сборку.

План Б заключался в том, чтобы создать экземпляр редактора динамически с помощью элемента управления-заполнителя, например:

EditorProvider editorProvider = new EditorProvider();
var control = editorProvider.HtmlEditorControl;

control.ID = "txtDescription";
phEditor.Controls.Add(control);

Это работает, но большинство кнопок на панели инструментов не работает!

Ошибка редактора DNN

Любая помощь будет принята с благодарностью!


person Joel.Cogley    schedule 03.04.2013    source источник


Ответы (3)


После некоторой ругани и тряски я нашел простой ответ - просто создать экземпляр пользовательского элемента управления вместо серверного элемента управления редактора.

var control = this.LoadControl("~/controls/TextEditor.ascx");
control.ID = "txtDescription";
phEditor.Controls.Add(control);
person Joel.Cogley    schedule 03.04.2013

Я предполагаю, что вы разрабатываете собственный модуль для dotnetnuke, вы можете посмотреть пример реализации в блоге исходный код модуля на codeplex.com. EditEntry.ascx - это элемент управления, содержащий тот же пример.

По сути, вам просто нужно сослаться на DotNetNuke.dll and DotNetNuke.WebControls.dll, чтобы он работал внутри объявления ascx.

person Prashant Lakhlani    schedule 03.04.2013

Нашел лучший ответ на http://www.dnnsoftware.com/forums/forumid/203/postid/466819/scope/posts от Христо Евтимова.

Его метод позволяет добавлять атрибуты в текстовый редактор.

Его код:

Один из способов сделать это так:

    DotNetNuke.UI.UserControls.TextEditor editor = (DotNetNuke.UI.UserControls.TextEditor)LoadControl("~/controls/texteditor.ascx");       
editor.ID = "Editor1";
this.Controls.Add(editor);

Мой код на VB.NET выглядел так:

    Dim txtDescription As DotNetNuke.UI.UserControls.TextEditor = DirectCast(LoadControl("~/controls/texteditor.ascx"), DotNetNuke.UI.UserControls.TextEditor)
        txtDescription.ID = "txtAOneDescription" & intControlCounter.ToString
        txtDescription.HtmlEncode = False
person Rlovetx    schedule 22.07.2013