0

我正在构建一个 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 编辑器错误

任何帮助将不胜感激!

4

3 回答 3

1

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

var control = this.LoadControl("~/controls/TextEditor.ascx");
control.ID = "txtDescription";
phEditor.Controls.Add(control);
于 2013-04-03T18:37:11.470 回答
0

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

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

于 2013-04-03T18:25:31.150 回答
0

在Hristo Evtimov的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
于 2013-07-22T13:45:01.570 回答