致电Chris Marisic:
如果克里斯·马里西奇(Chris Marisic)希望将他的评论升级为答案,我将给他饼干.
我已经解决如下:
Ajax形式:
@using (Ajax.BeginForm(MVC.Admin.StepEditor.Edit(), new AjaxOptions { UpdateTargetId = "ajaxEditor", HttpMethod = "POST", OnComplete="ReBindCKEditor" },
new { @name = "EditStepForm", @id = "EditStepForm" }))
{
@Html.LabelFor(model => model.StepText)
@Html.TextAreaFor(model => model.StepText, 20, 68, null)
@Html.ValidationMessageFor(model => model.StepText)
}
Javascript:
由于返回的错误(请参阅对Chris Marisic的答复)指出CKEDITOR实例已经存在,因此我需要摆脱它.所以:
function BindCKEditor() {
var elem = $('#StepText');
elem.ckeditor(function () {}, { toolbar: [
['Source'],
['Preview'],
['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Scayt'],
['Undo', 'Redo', '-', 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat'],
['Image', 'Table', 'HorizontalRule'],
['Styles', 'Format'],
['Bold', 'Italic', 'Strike'],
['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote'],
['Link', 'Unlink', 'Anchor']
]
});
}
BindCKEditor()只是在锡盒上说了什么.它配置编辑器并应用它.
现在,当我用ajax响应覆盖文本区域时,我需要删除该实例并重新创建它.所以:
function ReBindCKEditor() {
delete CKEDITOR.instances['StepText'];
BindCKEditor();
}
请注意,我在OnComplete中为Ajax窗体使用ReBindCKEditor().我使用oncomplete而不是onsuccess,因为无论ajax调用成功与否,我都希望重新绑定它.
成功!:
我不能高度推荐ckeditor.我以为这将是一场噩梦,但是当我坐下来将这些想法放在一边时,我发现这里有非常简洁的文档和良好的用户论坛.
我看了很多其他的Rich Text编辑器,但都没有得到同样好的支持.雅虎的看起来不错,但是除非您是我不是的JavaScript专家,否则噩梦和文档都很差.
我差一点就带着lwrte去了,它看起来不错,但是背后没有任何支持.
我看着其他不愿透露姓名的东西.
但是ckEditor确实给我留下了深刻的印象.现在,我可以毫无恐惧或恐惧地将其推出.
注意:
我不在CKEditor上工作,也与他们没有任何关系.这是真正的热情.是的,确实存在这样的事情.