最近在做一个关于企业新闻的功能,新闻嘛,必然是富文本的形式,所以采用了sl与js结合的技术,主要考虑了html富文本编辑器。在开发的过程中碰到了几个问题,差了很多资料,终于找到了办法在后台处理从前端返回来的json数据。在这里提醒大家一下,英语好,搞程序的话真的占很多优势,可以随意的查英文资料。
下面先说一下我的问题,我需要的是从在一个弹出框中,点击关闭按钮,返回一些列的json数据。开始在做的时候,程序返回的是一个scriptobject对象,查了很多资料都没有介绍如何从这个对象中解析出来想要的数据。后来在stackoverflow上找到了老外的解决办法。
<script type="text/javascript">
function ReturnValue(xmlContent,title,date,istop) {
//alert(xmlContent.toString());
var bp = { "content": xmlContent, "title": title, "date": date, "istop": istop };
window.returnValue = bp;
window.close();
}
</script>
js方法是在后台调用的。。
if (!Page.IsClientScriptBlockRegistered("aa"))
{
ClientScript.RegisterClientScriptBlock(ClientScript.GetType(), "aa", "<script type=\"text/javascript\">ReturnValue('" + model.Content + "','"+model.Title+"','"+model.Date+"','"+model.IsTop+"');</script>");
}
上面的代码是写在一个button的click事件中的。。因此,点击button之后会执行前台的js代码。那么窗体关闭之后,我们是如何的接受返回来的值呢?接着往下看:
public static object GetEditNews()
{
object XmlHttpObj = HtmlPage.Window.Invoke("showModalDialog", "./Msg/WebFm/frmNewsEdit.aspx", "", "dialogWidth:650px;dialogHeight:580px;resizable:no");
if (XmlHttpObj != null)
{
return XmlHttpObj;
}
return null;
}
上面是在sl中利用window对象与js交互,并得到返回来的对象。
ScriptObject XmlHttpObj = BillHelpers.GetEditNews() as ScriptObject;
if(XmlHttpObj!=null)
{
JsonObj model = XmlHttpObj.ConvertTo<JsonObj>();
string shotview="";
if(!string.IsNullOrEmpty(model.content))
{
shotview=model.content.Substring(0,10);
}
}
看了上面的代码,有的同学会有点茫然了,JsonObj是个什么东东。接下来就到了关键的地方了,当我们从前台返回来的是一个json对象时,可以将返回来的对象反序列话为我们预先定义好的实体。
[DataContract]
public struct JsonObj
{
[DataMember]
public string content;
[DataMember]
public string title;
[DataMember]
public string date;
[DataMember]
public string istop;
}
再与我们在前台定义的json数据对比一下,
var bp = { "content": xmlContent, "title": title, "date": date, "istop": istop };
ok,为了以后查询方便,写得不好请见谅。谢谢