尝试使用AJAX和JQuery将JSON对象传递给C#

本文关键字:对象 JSON JQuery AJAX | 更新日期: 2023-09-27 18:29:11

我正试图通过AJAX将一个动态的、用户创建的对象传递给一些C#。我对JSON并没有真正的经验,但它似乎是一个很好的方法。我不知道为什么,但这让我在声明对象时出错了。(据推测。)我做错了什么?谢谢

编辑:这似乎只是IE中的错误,但我需要它在IE7中工作。

网页错误详细信息

用户代理:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.1;WOW64;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;.NET4.0C;.NET4.0E;MDDC;InfoPath.2)时间戳:2012年3月28日星期三14:15:19 UTC

消息:需要标识符、字符串或数字线路:18字符:21代码:0URI:http://localhost:56560/Default.aspx

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
        <script type="text/javascript">
        $(function() {
            $('input[type=button').click(function(){
                var json_obj = { $('#t1').val() : $('#p1').val(),
                            $('#t2').val() : $('#p2').val()};
                $.ajax({
                    typeof: "POST",
                    url: '/test.aspx',
                    contentType: 'application/json; charset=utf-8',
                    data: json_obj,
                    dataType: 'json',
                    success: function(msg) {
                        alert('Success!');
                    },
                    error: function(msg) {
                        alert('Error!');
                    }
                });
            });
        });
    </script>
</head>
<body>
    <div>
        Type: 1: <input type="text" id="t1" />
        Property 1: <input type="text" id="p1" />
        Type 2: <input type="text" id="t2" />
        Property 2: <input type="text" id="p2" />
        <input type="button" value="Add object!" />
    </div>
</body>
</html>

背后的代码

public class Test
{
    public Test(string json)
    {
        JObject jObj = JObject.Parse(json);
        JToken jUser = jObj["json_obj"];
        first = (string)jObj["t1"];
        second = (string)jObj["t2"];
    }
    public string first { get; set; }
    public string second { get; set; }
}

尝试使用AJAX和JQuery将JSON对象传递给C#

我认为json数据的格式是错误的。试试这个:

var json_obj = "{'" + $('#t1').val() + "' : '" + $('#p1').val() + "', '" + $('#t2').val() + "' : '" + $('#p2').val() + "'}";

您可以在C#代码中添加一个函数,例如:

 [HttpPost]
 public JsonResult Test()
 {
   return Json(new {Success = true, CustomJSONAttribute="Whatever You Like"});
 }

然后调整JQueryajax以指向Test(),然后在成功函数中可以执行以下操作:

msg.成功和msg。自定义JSONAttribute

值得一提的是,我已经为此奋斗了几个小时。通过确保$.ajax调用中的JSON对象/var与C#中的参数名称匹配,我最终解决了缺少参数的问题。老实说,我不敢相信这就是问题所在。

    [WebMethod]
    public static void SetSession(String **json**)
    {
        String s = json;
    }

var json_obj = "{'" + '**json**' + "' : '" + 'the_val' + "'}";
                $.ajax({
                    type: "POST",
                    url: "my_page.aspx/SetSession",
                    data: json_obj,
                    contentType: "application/json; charset=utf-8",
                    dataType: 'json',
                    success: function ()
                    {
                        alert('SetSession executed.');
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown)
                    {
                        alert("Status: " + textStatus); alert("Error: " + XMLHttpRequest.responseText);
                    }
                });