最近几天在用silverlight做一个门户后台的数据录入,前台用Asp.net展示。这样一些格式化的文本——包含表格、文本颜色、下划线等,就需要保存html格式的文本到数据库中,这样前台可以直接展示。
针对这个问题,我们的项目经理给我推荐了FCKeditor,这是一个html文本编辑器,而且是开源项目。在网上找了相关的使用方法(可以去网上搜,这里不解释),然后添加了包含这个控件的页面,能将编辑器显示出来了。
下面的问题就是,silverlight客户端怎么去调用服务端的这个页面,并且将编辑的文本传给编辑器?编辑器编辑完以后,又怎么把编辑后的文本传给sl控件?
如何实现这个,我没有一点经验,咨询同事,得到的解决方案是,客户端调用服务端的js脚本,通过脚本打开编辑器页面,然后编辑器页面保存的时候通过脚本调用sl控件的方法,将内容传给sl控件。
// 客户端调用js脚本
1 ScriptObject hello = HtmlPage.Window.GetProperty("Hello") as ScriptObject;
2 hello.InvokeSelf(this.input.Text);
打开新窗口的js脚本网上很多,这里不累赘。
至于把编辑后的文本传给sl控件,用的是js脚本调用sl控件的方法。具体的请参考博客园里面的“一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码”。
以上是最初的解决方案。
后来经过修改,客户端打开新窗口,直接用的绝对uri,而窗口获取内容改成调用sl控件的方法返回值。
其实最值得一提的是FCKeditor的保存按钮事件方法,为了能使用它的保存按钮,进入到代码中看到这一段
FCKSaveCommand.prototype.Execute = function()
{
// Get the linked field form.
var oForm = FCK.GetParentForm() ;
if ( typeof( oForm.onsubmit ) == 'function' )
{
var bRet = oForm.onsubmit() ;
if ( bRet != null && bRet === false )
return ;
}...
于是给form的onsubmit实现了脚本方法,就更新了保存按钮的事件。
写到此已不知所云,写给自己,以对这几天的工作做个回顾和记载吧。