【问题标题】:Deserialize jQuery Serialized Form反序列化 jQuery 序列化表单
【发布时间】:2011-08-01 00:55:58
【问题描述】:

我正在尝试将表单输入传递给 WebMethod 并做一些事情。 我用jQuery Serialize

<script type="text/javascript">
        $.fn.serializeNoViewState = function () {
            return this.find("input,textarea,select,hidden")
               .not("[type=hidden][name^=__]")
               .serialize();
        }

        $(function () {
            $("#Button1").click(function (e) {
                var res = $("#myform").serializeNoViewState();
                var jsonText = JSON.stringify({ bject: res });
                $.ajax({
                    type: "POST",
                    url: "Default.aspx/Test",
                    data: jsonText,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                    //    alert("asd");


                    },
                    error: AjaxFailed
                });
            });
        });
        function AjaxFailed(result) {
            alert("Failed");
        }  
    </script>

在目标 WebMethod 中,我想反序列化我传递的那个对象。

[WebMethod()]
public static bool test(string bject)
{
    JavaScriptSerializer JsTool = new JavaScriptSerializer();

}

我尝试使用 Javascriptserilizer 类。但我没有成功。 现在我该如何使用这个对象? 我想用这种方式更简单地使用 jQuery AJAX(例如将表单输入传递给 WebService 并将其插入数据库中)。由于我想做的动作是这样的吗? 欢迎您的建议,提示。

更新:

如何将 Serialized JS 对象映射到我的 C# 实体对象? 这种方式是好方式吗?还是有更好的方法存在?如果是,请给我一些信息

【问题讨论】:

    标签: c# asp.net serialization jquery


    【解决方案1】:

    我建议您使用强类型。所以定义一个包含所有必要属性的类:

    public class MyModel
    {
        public string Prop1 { get; set; }
        public string Prop2 { get; set; }
    }
    

    然后让你的网络方法获取这个对象:

    [WebMethod()]
    public static bool test(MyModel bject)
    {
        ...
    }
    

    属性名称必须与您在 AJAX 请求中序列化的输入字段名称匹配。

    【讨论】:

    • 谢谢,但我认为这是不可能的!因为为输入字段生成的名称例如:ctl00%24MainContent%24TextBox1 有没有办法将 JS 对象映射到我的 C# 实体?
    【解决方案2】:

    也许你可以试试这个:

    JavaScriptSerializer JsTool = new JavaScriptSerializer();
    
    var listOfObjs = JsTool.Deserialize<List<YourDataType>>(bject);
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2011-03-26
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多