c#如何接受js返回ScriptObject对象存储的json数据
最近在做一个关于企业新闻的功能,新闻嘛,必然是富文本的形式,所以采用了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,为了以后查询方便,写得不好请见谅。谢谢