我正在构建一个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);
这种工作,但大多数工具栏按钮搞砸了!
非常感谢任何帮助!
答案 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