Not*_*tre 28 asp.net-mvc jquery json
我在尝试将复杂的JSON对象传递给MVC 4控制器操作时遇到了麻烦.由于JSON内容是可变的,我不希望MVC将JSON的各个属性/元素映射到action方法的参数列表中的参数.我只想在控制器操作中将数据作为单个JSON字符串参数获取.
这是我的动作方法的签名:
[HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(string jsonOfLog)
Run Code Online (Sandbox Code Playgroud)
这是我尝试从我的浏览器发布一些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
});
Run Code Online (Sandbox Code Playgroud)
当我在ConvertLogInfoToXML方法的开头点击断点时,jsonOfLog为空.
如果我更改了JavaScript中设置的'json'变量,以使jsonOfLog属性成为一个简单的字符串,例如:
json = { jsonOfLog: "simple string" };
Run Code Online (Sandbox Code Playgroud)
然后当我在ConvertLogInfoToXML方法开头的断点被命中时,jsonOfLog是字符串的值(例如"简单字符串").
我尝试将action方法中的jsonOfLog参数的类型更改为object类型:
[HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(object jsonOfLog)
Run Code Online (Sandbox Code Playgroud)
现在,使用原始的JavaScript代码(我传递一个更复杂的'数据'对象),jsonOfLog获取{object}的值.但是调试器在监视窗口中没有显示任何更多细节,我不知道我可以用什么方法来操作这个变量.
如何将JSON数据传递给MVC控制器,其中传递的数据是字符串化的复杂对象?
谢谢,Notre
Jai*_*res 24
问题是您dataType和data参数的格式.我刚刚在沙箱中测试了这个,以下工作:
C#
[HttpPost]
public string ConvertLogInfoToXml(string jsonOfLog)
{
return Convert.ToString(jsonOfLog);
}
Run Code Online (Sandbox Code Playgroud)
JavaScript的
<input type="button" onclick="test()"/>
<script type="text/javascript">
function test() {
data = { prop: 1, myArray: [1, "two", 3] };
//'data' is much more complicated in my real application
var jsonOfLog = JSON.stringify(data);
$.ajax({
type: 'POST',
dataType: 'text',
url: "Home/ConvertLogInfoToXml",
data: "jsonOfLog=" + jsonOfLog,
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
},
processData: false,
async: false
});
}
</script>
Run Code Online (Sandbox Code Playgroud)
请特别注意data,在发送文本时,您需要发送与参数名称匹配的变量.它不漂亮,但它会让你梦寐以求的无格式字符串.
运行时,jsonOfLog在服务器函数中看起来像这样:
jsonOfLog "{\"prop\":1,\"myArray\":[1,\"two\",3]}" string
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
HTTP POST正文:
jsonOfLog={"prop":1,"myArray":[1,"two",3]}
Run Code Online (Sandbox Code Playgroud)
响应头:
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==?=
Run Code Online (Sandbox Code Playgroud)
响应机构:
{"prop":1,"myArray":[1,"two",3]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111748 次 |
| 最近记录: |