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,为了以后查询方便,写得不好请见谅。谢谢

posted on 2012-03-26 21:53  夏天爱上雨  阅读(1909)  评论(0编辑  收藏  举报

导航