从DNN解决方案外部引用DNN编辑器

时间:2013-04-03 14:14:43

标签: dotnetnuke dotnetnuke-module radeditor

我正在构建一个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的引用显然会破坏构建。

计划B是通过占位符控件动态实例化编辑器,如下所示:

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

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

这种工作,但大多数工具栏按钮搞砸了!

DNN Editor bug

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

经过一些咒骂和轰炸,我找到了简单的答案,只是实例化用户控件而不是编辑器服务器控件。

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

答案 1 :(得分:0)

我假设您正在为dotnetnuke开发自定义模块,您可以在codeplex.com上的blog module源代码中查看示例实现。 EditEntry.ascx是包含相同示例的控件。

基本上,您只需要引用DotNetNuke.dll and DotNetNuke.WebControls.dll以使其在ascx声明中工作。

答案 2 :(得分:0)

http://www.dnnsoftware.com/forums/forumid/203/postid/466819/scope/posts找到更好的答案  来自Hristo Evtimov。

他的方法允许您向文本编辑器添加属性。

他的代码:

一种方法是这样的:

    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