反序列化jQuery序列化表单数据

5

我正在尝试将表单输入传递到一个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();

}

我尝试使用JavascriptSerializer类,但是没有成功。 现在我该如何使用这个对象? 我想用这种方式来更简单地使用jQuery AJAX(例如将表单输入传递给Web服务并将其插入到数据库中)。由于我要做的操作是这样的,所以我想这样做是正确的吧? 欢迎您的建议和提示。
更新: 我该如何将序列化后的JS对象映射到我的C#实体对象? 这种方式是否可行?还有更好的方法吗?如果有,请给我一些信息。
2个回答

4
我建议您使用强类型进行工作。因此,定义一个包含所有必要属性的类:

我建议您使用强类型进行工作。因此,定义一个包含所有必要属性的类:

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

然后让您的Web方法接受此对象:

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

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

1
谢谢,但我认为这是不可能的!因为生成的输入字段名称例如:ctl00%24MainContent%24TextBox1。有没有办法将JS对象映射到我的C#实体? - Shahin

2
也许你可以尝试这个:
JavaScriptSerializer JsTool = new JavaScriptSerializer();

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

希望能帮到你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接