通过jQuery将JSON数据发布到ASP .NET MVC 4控制器操作

前端之家收集整理的这篇文章主要介绍了通过jQuery将JSON数据发布到ASP .NET MVC 4控制器操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法尝试传递一个复杂的JSON对象到MVC 4控制器操作。由于JSON内容是可变的,我不想让MVC将JSON的各个属性/元素映射到action方法参数列表中的参数。我只想在控制器操作中将数据作为单个JSON字符串参数。

这里是我的行动方法的签名:

[HttpPost]
    [ValidateInput(false)]
    public string ConvertLogInfoToXml(string jsonOfLog)

这里是我试图发布一些JSON数据,从我的浏览器:

data = {prop: 1,myArray: [1,"two",3]}; 
    //'data' is much more complicated in my real application
    json = {jsonOfLog: data};

    $.ajax({
        type: 'POST',url: "Home/ConvertLogInfoToXml",data: JSON.stringify(json),success: function (returnPayload) {
            console && console.log ("request succeeded");
        },error: function (xhr,ajaxOptions,thrownError) {
            console && console.log ("request Failed");
        },dataType: "xml",contentType: "application/json",processData: false,async: false
    });

当我在ConvertLogInfoToXML方法的开头点击我的断点时,jsonOfLog为null。

如果我改变什么’json’变量在JavaScript中设置为jsonOfLog属性是一个简单的字符串,例如。 :

json = { jsonOfLog: "simple string" };

那么当我的断点在ConvertLogInfoToXML方法的开头被命中时,jsonOfLog是字符串的值(例如“simple string”)。

我试图将action方法中的jsonOfLog参数的类型更改为object类型:

[HttpPost]
    [ValidateInput(false)]
    public string ConvertLogInfoToXml(object jsonOfLog)

现在,使用原始的JavaScript代码(我传递一个更复杂的“数据”对象),jsonOfLog获取{object}的值。但调试器不会在观察窗口中显示任何更多的细节,我不知道我可以使用什么方法来操作这个变量。

如何将JSON数据传递到MVC控制器,其中传递的数据是一个字符串的复杂对象?

谢谢,
巴黎

解决方法

问题是您的dataType和数据参数的格式。我只是测试这个在沙箱和以下工作:

C#

[HttpPost]
    public string ConvertLogInfoToXml(string jsonOfLog)
    {
        return Convert.ToString(jsonOfLog);
    }

javascript

<input type="button" onclick="test()"/>

    <script type="text/javascript">

        function test() {
            data = { prop: 1,3] };
            //'data' is much more complicated in my real application
            var jsonOfLog = JSON.stringify(data);

            $.ajax({
                type: 'POST',dataType: 'text',data: "jsonOfLog=" + jsonOfLog,success: function (returnPayload) {
                    console && console.log("request succeeded");
                },thrownError) {
                    console && console.log("request Failed");
                },async: false
            });
        }

    </script>

要特别注意数据,发送文本时,需要发送一个与参数名称匹配的变量。它不漂亮,但它会得到你梦寐以求的无格式字符串。

当运行这个,jsonOfLog在服务器功能中看起来像这样:

jsonOfLog   "{\"prop\":1,\"myArray\":[1,\"two\",3]}"    string

HTTP POST标头:

Key Value
Request POST /Home/ConvertLogInfoToXml HTTP/1.1
Accept  text/plain,*/*; q=0.01
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer http://localhost:50189/
Accept-Language en-US
Accept-Encoding gzip,deflate
User-Agent  Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Host    localhost:50189
Content-Length  42
DNT 1
Connection  Keep-Alive
Cache-Control   no-cache
Cookie  EnableSSOUser=admin

HTTP POST正文:

jsonOfLog={"prop":1,"myArray":[1,3]}

响应头:

Key Value
Cache-Control   private
Content-Type    text/html; charset=utf-8
Date    Fri,28 Jun 2013 18:49:24 GMT
Response    HTTP/1.1 200 OK
Server  Microsoft-IIS/8.0
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 4.0
X-Powered-By    ASP.NET
X-SourceFiles   =?UTF-8?B?XFxwc2ZcaG9tZVxkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXE12YzRQbGF5Z3JvdW5kXE12YzRQbGF5Z3JvdW5kXEhvbWVcQ29udmVydExvZ0luZm9Ub1htbA==?=

响应体:

{"prop":1,3]}
原文链接:https://www.f2er.com/jquery/183864.html

猜你在找的jQuery相关文章