我在ASP.NET MVC中遇到了FCKEditor的另一个问题。请查看以下代码
<script type="text/javascript">
var sBasePath = 'http://localhost:2170/Content/fckeditor/';
var oFCKeditor = new FCKeditor('FCKeditor1');
oFCKeditor.BasePath = sBasePath;
oFCKeditor.Height = 300;
oFCKeditor.Create();
var timer;
function ShowContent() {
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1');
if (oEditor != undefined) {
var ContentText = '<%= Model.Article.ContentText %>';
oEditor.SetHTML(ContentText)
clearTimeout(timer);
}
else {
timer = setTimeout("ShowContent()", 1000);
}
}
timer = setTimeout("ShowContent()", 1000);
</script>
正如您所看到的,第一个问题是我必须对BasePath值进行硬编码,如果我将BasePath设置为Content / fckeditor之类的相对路径,那么它将在http://localhost:2170/Article/Content/fckeditor中查找FCKEditor,这将导致404错误。虽然它在绝对路径下仍能正常工作,但我必须在部署到生产服务器时更改这些路径。
第二个问题是将值绑定到fckeditor,因为fckeditor只有在页面完全加载后才可用,我在创建fckeditor时不能直接使用SetHTML方法,因为此时oEditor对象是未定义的。相反,我必须使用setTimeout函数重复检查oEditor对象,直到它可用,然后将内容绑定到它。
我不知道是否有其他方法可以解决上述两个问题?
答案 0 :(得分:3)
对于第一个问题,请使用:
<%= ResolveUrl("~/Content/fckeditor") %>
答案 1 :(得分:2)
首先,我在页面加载完成后(通过使用window onload事件)完成所有这些工作。这将确保所有控件都已创建并可供使用,其次使用Url.Content方法设置基本路径:
var sBasePath = '<%= Url.Content ("~/Content/fckeditor/") %>';
这样,应用程序的运行位置无关紧要(http://localhost:PORT或http://dev.someplace.com等)。
答案 2 :(得分:0)
FCK不会使用您应用它的textarea的值来设置内容吗?您不需要从JavaScript填充它,只需在Html.TextArea调用中设置模型中的值。