【发布时间】:2015-06-28 08:55:23
【问题描述】:
我已选择 CKEditor 作为我的 ASP.Net MVC 项目的富文本编辑器组件。
渲染富文本编辑器不是问题(其实很简单):
@Html.TextAreaFor(model => model.MessageDiffusion.Message, new { @id = idRichTextEditor })
<script type="text/javascript">
$(document).ready(function () {
// Rich Text Editor (CKEditor) Configuration
CKEDITOR.replace(
idRichTextEditor, {
language: 'fr'
}
);
});
</script>
呈现:
我的问题与发布数据有关。如果我将消息更改为:“新消息”,我仍然会在帖子中看到“旧消息”:
我的意思是,viewModel 将有一个属性消息,其中将包含“旧消息”而不是“新消息”。 我尝试在发布之前立即执行以下操作(onBegin):
$('#idRichTextEditor').text(CKEDITOR.instances["idRichTextEditor"].getData());
或者:
$('#idRichTextEditor').val(CKEDITOR.instances["idRichTextEditor"].getData());
这没有帮助...我也尝试过:
for (var instanceName in CKEDITOR.instances) {
CKEDITOR.instances["idRichTextEditor"].updateElement();
}
但我似乎无法将 CKEditor 的文本区域与我的模型绑定。我想说的是,如果我把这个富文本区域变成一个公共文本区域,我可以很容易地在控制器端获得“新消息”。
我想说,尽管很有趣,并且与我的问题相关,但以下 stackoverflow 的讨论对我没有多大帮助:
CKEditor MVC 3 implementation Help needed
CKEditor and ASP.Net MVC 3 RequiredAttribute
我认为这个问题可能与
在 CKEditor 中设置数据是一个异步操作,如果任何元素是编辑器,则 val('some data') 将返回一个 jQuery Promise 对象。您可以将它与 jQuery 助手一起使用: $.when( $( '#editor' ).val( 'foo' ) ).then( function() { // 现在您确定数据已设置。 });
我在这里阅读了以下信息: CKEditor 4 documentation
更新:我刚刚意识到,当我第二次发布数据时,富文本信息已正确绑定到我的视图模型的 Message 属性。这意味着如果我点击“保存按钮”两次,但不是一次,我可以获得我想要的东西......
【问题讨论】:
-
你能用
ViewModel的定义更新问题吗? -
嗨@ramiramilu,MessageDiffusion 是一个实体,Message 属性是一个字符串。
标签: c# asp.net-mvc asp.net-mvc-4 model-view-controller ckeditor