我想在DynamicData网站上使用CKEditor。我找到的所有示例都是旧版本的CKEditor。
那么如何将CKEditor与asp.net dyamica数据网站集成?
非常感谢任何帮助。
IY
答案 0 :(得分:4)
我所做的是修改动态数据 / FieldTemplates / 文件夹中的 MultilineText_Edit.ascx 文件+代码隐藏,如下所示。请注意,在我的示例中,您需要引用jQuery和CKEditor jQuery适配器,后者最有可能位于 /ckeditor/adapters/jquery.js 中。
我们的想法是使用ID为“ State ”的HiddenField
控件作为数据的载体。请注意在重写的OnPreRender(...)
中注册的客户端脚本:在任何.NET表单提交(此处由动态数据尝试保存,更新等触发)中,来自CKEditor的数据将保存到状态隐藏字段,数据通过被覆盖的ExtractValues(...)
从 State 的FieldTemplate控件中提取。
澄清一下:不返回TextBox
控件 Editor 的内容的原因是,它将返回控件的初始内容,放弃CKEditor更改。 CKEditor需要客户端将其标记和内容呈现给某个地方,因此我们对 State HiddenField
执行此操作(对TextBox
控件本身执行此操作会使事情变得混乱,据我记得。)
最后一件事:如果您希望保留 MultilineText_Edit.ascx 以进行正常的非CKEditor多行文字编辑,请将代码放在新文件中,例如: MultilineHtml_Edit.ascx 并在部分Linq2SQL类的元数据类中将属性的UIHint设置为“ MultilineHtml ”:
[UIHint("MultilineHtml")]
public string Description { get; set; }
<强> MultilineText_Edit.ascx 强>
<%@ Control Language="C#" CodeBehind="MultilineText_Edit.ascx.cs" Inherits="MyProject.DynamicData.MultilineText_EditField" %>
<asp:TextBox ID="Editor" TextMode="MultiLine" runat="server" />
<asp:HiddenField ID="State" runat="server" />
<script type="text/javascript">
$(document).ready(function () {
$('#<%= Editor.ClientID %>').ckeditor(function () { }, { height: '400px' });
});
</script>
<asp:RequiredFieldValidator runat="server" id="RequiredFieldValidator1" CssClass="DDControl DDValidator" ControlToValidate="Editor" Display="Static" Enabled="false" />
<asp:RegularExpressionValidator runat="server" ID="RegularExpressionValidator1" CssClass="DDControl DDValidator" ControlToValidate="Editor" Display="Static" Enabled="false" />
<asp:DynamicValidator runat="server" id="DynamicValidator1" CssClass="DDControl DDValidator" ControlToValidate="Editor" Display="Static" />
<强> MultilineText_Edit.ascx.cs 强>
using System;
using System.Collections.Specialized;
using System.Web.UI;
namespace MyProject.DynamicData
{
public partial class MultilineText_EditField : System.Web.DynamicData.FieldTemplateUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
Editor.MaxLength = Column.MaxLength;
Editor.ToolTip = Column.Description;
SetUpValidator(RequiredFieldValidator1);
SetUpValidator(RegularExpressionValidator1);
SetUpValidator(DynamicValidator1);
}
public override void DataBind()
{
Editor.Text = FieldValueEditString;
base.DataBind();
}
protected override void OnPreRender(EventArgs e)
{
Page.ClientScript.RegisterOnSubmitStatement(
this.GetType(),
string.Format("kfckpb_{0}", this.ClientID),
string.Format("$('#{0}').val($('#{1}').val());", State.ClientID, Editor.ClientID)
);
base.OnPreRender(e);
}
protected override void ExtractValues(IOrderedDictionary dictionary)
{
dictionary[Column.Name] = ConvertEditedValue(State.Value);
}
public override Control DataControl
{
get
{
return Editor;
}
}
}
}