`

如何快速实现HTML编辑器.NET组件

阅读更多
作者:未知   请作者速与本人联系


得到“素材”
首先我们需要得到一个HTML编辑器的原始代码,网上有不少这类的编辑器,如大名鼎鼎的RichTextBox,为了避免版权纠纷,以我所做得为例(暂名:UltraTextBox):在编辑器工具栏的空白地方点击鼠标右键-->查看源代码,如图所示。
把代码拷贝出来保存成一个.htm文件就可以看到效果,是不是感觉很简单的就作了一半?:)
为了以后讲解方面我们把它保存为editor.aspx文件,在这里注意删除掉__VIEWSTATE一段。
然后把相应的图标,CSS文件等保存在相应的位置,否则你的界面会很难看,当然你也可以根据需要自己来做图标。
好了,准备工作基本做完,下面是讲怎样把它封装为.NET组件,方便你在工程中使用。
--------------------------------------------------------------------------------
封装成ASP.NET组件
首先在VS.NET环境里生成一个UltraTextBoxV1组件(也可以称为自定义控件,我习惯称为组件)项目,
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
//设置该组件的标记前缀
[assembly:TagPrefix("gOODiDEA.UltraTextBoxV1", "UTBV1")]
namespace gOODiDEA.UltraTextBoxV1
{
    //添加类声明 
    [
    DefaultProperty("Text"),
    ValidationProperty("Text"),
    ToolboxData("<{0}:UltraTextBoxV1 runat=server></{0}:UltraTextBoxV1>"),
    ParseChildren(false),
    Designer("gOODiDEA.UltraTextBoxV1.UltraTextBoxV1Designer")
    ]
    public class UltraTextBoxV1: System.Web.UI.Control, IPostBackDataHandler
    {
        private static readonly object ValueChangedEvent = new object();
        //声明一个代理用于处理值被改变的事件,当组件的值更改时发生ValueChanged事件 
        public event EventHandler ValueChanged
        {
            add
            {
                Events.AddHandler(ValueChangedEvent, value);
            }
            remove
            {
                Events.RemoveHandler(ValueChangedEvent, value) ;
            }
        }
        //触发值被改变事件的方法
        protected virtual void OnValueChanged(EventArgs e)
        {
            if( Events != null )
            {
                EventHandler oEventHandler = ( EventHandler )Events[ValueChangedEvent] ;
                if (oEventHandler != null) oEventHandler(this, e);
            }
        }
        //处理回发数据 
        bool IPostBackDataHandler.LoadPostData( string postDataKey, 
System.Collections.Specialized.NameValueCollection postCollection ) { if ( postCollection[postDataKey] != Text ) { Text = postCollection[postDataKey]; return true; } return false; } //告诉应用程序该组件的状态已更改 void IPostBackDataHandler.RaisePostDataChangedEvent() { OnValueChanged( EventArgs.Empty ); } //我们对一个编辑器主要需要实现下面4个属性,Text,Width,Height,BasePath。 //Text属性:(从编辑器得到值和把值赋给编辑器) [Bindable(true),DefaultValue("")] public string Text { get { object o = ViewState["Text"]; return ( o == null ) ? String.Empty : ( string )o; } set { ViewState["Text"] = value; } } //Width属性:(编辑器的宽) [Bindable(true),Category("Appearence"),DefaultValue("100%")] public Unit Width { get { object o = ViewState["Width"]; return ( o == null ) ? Unit.Parse( "100%" ) : ( Unit )o ; } set { ViewState["Width"] = value ; } } //Height属性:(编辑器的高) [Bindable(true),Category("Appearence"),DefaultValue("385px")] public Unit Height { get { object o = ViewState["Height"]; return ( o == null ) ? Unit.Parse( "385px" ) : ( Unit )o ; } set { ViewState["Height"] = value ; } } //BasePath属性:(第一步保存的editor.aspx的路径以及以后做的插件的路径) [Bindable(true),DefaultValue("../UltraTextBoxV1Sys/Plug-Ins/")] public string BasePath { get { object o = ViewState["BasePath"]; return (o == null) ? "../UltraTextBoxV1Sys/Plug-Ins/" : (string)o; } set { ViewState["BasePath"] = value; } } //接下来是最重要的怎样把本组件和Editor.aspx结合起来,这里使用的是iframe技术: //覆盖Render方法,运行时输出: protected override void Render(HtmlTextWriter output) { System.Web.HttpBrowserCapabilities oBrowser = Page.Request.Browser ; //对应的IE版本必须是5.5或以上的版本 if (oBrowser.Browser == "IE" && oBrowser.MajorVersion >= 5.5 && oBrowser.Win32) { string sLink = BasePath + "Editor.aspx?FieldName=" + UniqueID; //如果不使用SetTimeout则会提示找不到对象 output.Write( "<IFRAME id=\"{5}\" src=\"{0}\" width=\"{1}\" height=\"{2}\" frameborder=\"no\" scrolling=\"no\"
onload=\"javascipt:setTimeout('{5}.HtmlEdit.document.body.innerHTML = document.getElementById(\\'{4} \\').value',1000);\" onblur=\"{4}.value = {5}.HtmlEdit.document.body.innerHTML\"></IFRAME>", sLink, Width, Height, Text, UniqueID, ID + "_editor" ) ; //存储编辑器的值 output.Write( "<INPUT type=\"hidden\" id=\"{0}\" name=\"{0}\" value=\"{1}\" >", UniqueID, System.Web.HttpUtility.HtmlEncode(Text) ) ; } } } //接下来给该组件实现一个设计时的界面: public class UltraTextBoxV1Designer : System.Web.UI.Design.ControlDesigner { public UltraTextBoxV1Designer(){} public override string GetDesignTimeHtml() { UltraTextBoxV1 oControl = ( UltraTextBoxV1 )Component ; return String.Format( "<TABLE width=\"{0}\" height=\"{1}\" bgcolor=\"#f5f5f5\" bordercolor=\"#c7c7c7\" cellpadding=\"0\"
cellspacing=\"0\" border=\"1\"><TR><TD valign=\"middle\" align=\"center\">UltraTextBox 1.1 - <B>{2}</B></TD></TR></TABLE>", oControl.Width, oControl.Height, oControl.ID ) ; } } }
至此组件部分就基本做完,把它编译后的Dll拷贝你的项目文件夹下,在工具栏-->组件里添加它,你就可以直接拖放进你的页面,在你的工程中使用。
--------------------------------------------------------------------------------
添加插件
这里举两个例子来说明怎样给该编辑器添加插件:
如果你要给编辑器添加一些功能,如上传图片,插入标签等,则首先应该给它添加一个图标:
<div class="Btn" TITLE="上传图片" LANGUAGE="javascript" onclick="UTB_InsertImg()">
<img class="Ico" src="..\images\img.gif" WIDTH="16" HEIGHT="16">
</div>

<div class="Btn" TITLE="插入EXCEL表格" LANGUAGE="javascript" onclick="UTB_InsertExcel()">
<img class="Ico" src="..\images\insertexcel.gif" WIDTH="16" HEIGHT="16">
</div>
然后在JScript代码里添加UTB_InsertImg(),UTB_InsertExcel()的实现:
function UTB_InsertImg()
{
//只能在编辑模式下使用
if ( ! UTB_validateMode() )
return;
HtmlEdit.focus();
//在当前光标处创建一个区域用于插入图片
var range = HtmlEdit.document.selection.createRange();
//用模式对话框打开上传页面,把返回值插入到编辑器中
var arr = showModalDialog(""uploadface.aspx"", """", ""dialogWidth:430px;dialogHeight:280px;help:0;status:0"");
if (arr != null)
{
//得到的返回值应该是形如:<img src="http://61.139.77.178:8088/gOODiDEA/pic01.jpg">
range.pasteHTML( arr );
}
HtmlEdit.focus();
}

function UTB_InsertExcel()
{
if (!UTB_validateMode())
return;
HtmlEdit.focus();
//在这里其实就是插入一个Microsoft Office Web Components(MSOWC)组件
var range = HtmlEdit.document.selection.createRange();
range.pasteHTML(""<object classid='clsid:0002E510-0000-0000-C000-000000000046' id='Spreadsheet1' 
codebase='file:\\Bob\software\office2000\msowc.cab' width='100%' height='250'><param name='HTMLURL' value>
<param name='HTMLData' value='&lt;html xmlns:x=&quot;urn:schemas-microsoft-com:office:excel&quot;xmlns=&quot;
http://www.w3.org/TR/REC-html40&quot;&gt;&lt;head&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;
!--tr{mso-height-source:auto;}td{black-space:nowrap;}.wc4590F88{black-space:nowrap;font-family:宋体;
mso-number-format:General;font-size:auto;font-weight:auto;font-style:auto;text-decoration:auto;
mso-background-source:auto;mso-pattern:auto;mso-color-source:auto;text-align:general;vertical-align:bottom;
border-top:none;border-left:none;border-right:none;border-bottom:none;mso-protection:locked;}--&gt;&lt;/style&gt;
&lt;/head&gt;&lt;body&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;x:ExcelWorkbook&gt;&lt;x:ExcelWorksheets&gt;&lt;
x:ExcelWorksheet&gt;&lt;x:OWCVersion&gt;9.0.0.2710&lt;/x:OWCVersion&gt;&lt;x:Label Style='border-top:solid .5pt silver;
border-left:solid .5pt silver;border-right:solid .5pt silver;border-bottom:solid .5pt silver'&gt;&lt;x:Caption&gt;
Microsoft Office Spreadsheet&lt;/x:Caption&gt; &lt;/x:Label&gt;&lt;x:Name&gt;Sheet1&lt;/x:Name&gt;&lt;x:WorksheetOptions&gt;
&lt;x:Selected/&gt;&lt;x:Height&gt;7620&lt;/x:Height&gt;""+ ""&lt;x:Width&gt;15240&lt;/x:Width&gt;&lt;x:TopRowVisible&gt;0&lt;/x:TopRowVisible&gt;&lt;x:LeftColumnVisible&gt;0&lt;
/x:LeftColumnVisible&gt; &lt;x:ProtectContents&gt;False&lt;/x:ProtectContents&gt; &lt;x:DefaultRowHeight&gt;210&lt;
/x:DefaultRowHeight&gt; &lt;x:StandardWidth&gt;2389&lt;/x:StandardWidth&gt; &lt;/x:WorksheetOptions&gt; &lt;
/x:ExcelWorksheet&gt;&lt;/x:ExcelWorksheets&gt; &lt;x:MaxHeight&gt;80%&lt;/x:MaxHeight&gt;&lt;x:MaxWidth&gt;
80%&lt;/x:MaxWidth&gt;&lt;/x:ExcelWorkbook&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;table class=wc4590F88 x:str&gt;
&lt;col width=&quot;56&quot;&gt;&lt;tr height=&quot;14&quot;&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;
/body&gt;&lt;/html&gt;'> <param name='DataType' value='HTMLDATA'> <param name='AutoFit' value='0'>
<param name='DisplayColHeaders' value='-1'><param name='DisplayGridlines' value='-1'><param name='DisplayHorizontalScrollBar' value='-1'>
<param name='DisplayRowHeaders' value='-1'><param name='DisplayTitleBar' value='-1'><param name='DisplayToolbar' value='-1'>
<param name='DisplayVerticalScrollBar' value='-1'> <param name='EnableAutoCalculate' value='-1'> <param name='EnableEvents' value='-1'>
<param name='MoveAfterReturn' value='-1'><param name='MoveAfterReturnDirection' value='0'><param name='RightToLeft' value='0'>
<param name='ViewableRange' value='1:65536'></object>""); HtmlEdit.focus(); }
关于怎样实现上传图片在这里就不多讲,CSDN上这类帖子太多了。只是要注意一点,因为使用的是模式对话框,所以在该页面不能有回发事件,操作最好在iframe里做。
--------------------------------------------------------------------------------
总结
谢谢你能看到这里,至此一个简单的HTML编辑器就制作完成了,本文主要讲述了如何得到一个HTML编辑器的代码,如何把它封装成一个.NET组件以及通过两个列子讲解了给它添加插件的方法。从上面的步凑你可以看出制作一个HTML编辑器其实很简单,虽然借鉴了一些别人的代码,但如果你仔细分析一下那些JS脚本,你就会豁然开朗的,如果你有更好的想法希望能告诉我。
分享到:
评论

相关推荐

    网页在线编辑器.net版

    .NET框架下的网页在线编辑器可以利用ASP.NET技术,实现服务器端与客户端的交互,提高网页应用的响应速度和安全性。 2. 右键功能:编辑器支持右键操作,意味着用户可以通过鼠标右键菜单进行快捷操作,如粘贴内容、...

    简单的富文本编辑器 .net

    富文本编辑器是软件开发中常见的一种组件,它允许用户以类似于Word的界面进行文本编辑,支持各种格式的设定,如字体、字号、颜色、对齐方式、插入图片、超链接等。在.NET框架下,我们可以找到许多实现富文本编辑功能...

    非常好的ASP.NET文本编辑器

    在这个名为“非常好的ASP.NET文本编辑器”的资源中,我们可以推测这是一款适用于ASP.NET平台的在线文本编辑组件。 文本编辑器在Web应用中扮演着重要角色,它允许用户在浏览器中进行富文本编辑,如创建和编辑HTML...

    ASP.NET的HTML编辑器

    ASP.NET的HTML编辑器是Web开发中的一个重要组件,它允许用户在网页上创建和编辑HTML内容,常用于博客系统、论坛、CMS(内容管理系统)等应用场景。这些编辑器通常具有丰富的文本格式化选项,比如字体样式、大小调整...

    WEB在线编辑器asp.net

    这款编辑器通常集成在网站后台管理系统中,为内容发布者提供了一个直观且功能丰富的界面,以实现快速创建和修改网页内容。 ASP.NET是微软公司推出的一种服务器端编程框架,它为Web应用程序提供了强大的开发支持。...

    ASP.NET文本编辑器

    总的来说,ASP.NET文本编辑器是一个功能强大的开发工具,它简化了在ASP.NET应用中实现富文本编辑的过程。通过合理利用提供的DLL、前端资源和使用说明,开发者可以快速集成并定制编辑器,为用户提供一个直观、功能...

    百度UEditor(1.1.6)编辑器asp.net上传组件

    使用说明 功能:百度UEditor(1.1.6版本)asp.net上传组件 使用方法: 把压缩包里 image.html upload.aspx upload....UEditor编辑器官方下载地址: http://ueditor.baidu.com/download.html buzhizhe 2011-10-21

    fck网页编辑器终极配置 asp.net版本

    这款编辑器最初由FredCK开发,支持多种编程语言,包括ASP.NET,使得Web开发者能够轻松地在网站中集成一个功能强大的文本编辑组件。 **ASP.NET版本的FCKeditor** ASP.NET是微软推出的一种服务器端编程框架,用于...

    C# vb.net winform html编辑器

    本 dll 文件为C# winform HTML 编辑器组件.剑儿软件,必属精品 使用方法,在VS的工具栏中,添加“选项”选择此 dll 文件,添加成功后,即会在工具栏中出现一个“HtmlEditor”,将其与其它控件一样,拖放使用即可。 ...

    .net定制版在线html编辑器控件

    《.NET定制版在线HTML编辑器控件详解》 在.NET开发环境中,高效且功能丰富的HTML编辑器控件是不可或缺的工具,它们使得开发者能够轻松地创建和编辑网页内容。本篇文章将深入探讨一个专为.NET平台定制的在线HTML编辑...

    asp.net3.5 HTML在线编辑器 WebEditor

    WebEditor控件作为HTML编辑器,可能包含以下关键组件和特性: 1. **富文本编辑功能**:提供基本的文本格式化选项,如加粗、斜体、下划线、字体选择、字号调整等。 2. **插入媒体**:支持插入图片、视频或音频,...

    ASP.NET 在线编辑器

    总的来说,ASP.NET在线编辑器是构建动态网站和互动应用的重要组件,它们提升了用户在网页上创作内容的能力。在实际开发中,开发者需要结合编辑器的特点和项目的具体需求,进行合理的配置和定制,以实现最佳的用户...

    ASP在线编辑器,ASP.NET在线编辑器,PHP在线编辑器JS部分更正

    在给定的标题和描述中,我们聚焦于几个关键的编程语言和技术,包括ASP、ASP.NET、PHP以及JavaScript,这些都是构建在线编辑器的重要组件。 ASP(Active Server Pages)是由微软开发的一种服务器端脚本环境,用于...

    asp.net网页编辑器

    综上所述,ASP.NET网页编辑器是ASP.NET平台上的一个关键组件,它极大地简化了网页内容的创建和维护。通过选择合适的编辑器控件,结合ASP.NET的特性和最佳实践,开发者可以构建出安全、易用且功能丰富的Web内容管理...

    asp.net 文本编辑器

    在ASP.NET中,HTML编辑器是一种常见且重要的组件,它允许用户在Web页面上进行富文本编辑,如在论坛、博客或内容管理系统中发布内容。"HtmlEditor"在ASP.NET中的应用广泛,它通常以控件的形式集成到网页中,为用户...

    Asp.Net FCKeditor编辑器的用法详解

    通过上述步骤,您可以在Asp.Net项目中成功部署并配置FCKeditor编辑器,实现一个功能齐全、易于使用的编辑环境。此外,通过调整各种配置选项,还可以进一步定制编辑器以适应不同的应用场景和需求。对于开发者而言,...

    asp.net文本编辑器下载

    标题中提到的"asp.net文本编辑器下载",意味着我们需要关注的是在ASP.NET环境中如何获取并安装文本编辑器组件。FCKeditor是一款流行的开源富文本编辑器,它提供了丰富的功能,如字体样式、颜色选择、图片上传、链接...

    Asp.net用户前台富文本编辑器

    "Asp.net用户前台富文本编辑器"这个主题关注的就是如何在ASP.NET环境中集成并使用这样的编辑器,以提供给用户一个功能强大、易于操作的界面来创建和编辑HTML内容。富文本编辑器能够支持诸如字体样式调整、图片上传、...

    html编辑器(.net)

    在这个特定的场景中,我们关注的是一个基于.NET实现的HTML编辑器。 首先,`web.config`文件是ASP.NET应用程序的核心配置文件,它包含了应用程序运行时的配置信息,如数据库连接字符串、身份验证设置、错误处理策略...

    asp.net XML文件编辑器

    在"Example135-XML文件编辑器"这个压缩包中,可能包含了实现上述功能的源代码示例,开发者可以通过学习这些代码来理解如何在ASP.NET环境中创建一个XML文件编辑器。实际应用中,根据具体需求,可能还需要添加额外的...

Global site tag (gtag.js) - Google Analytics