我在尝试将复杂的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。
如果我更改JavaScript中设置的“ html" target="_blank">json”变量,以使jsonOfLog属性为简单字符串,例如:
json = { jsonOfLog: "simple string" };
然后,当我在ConvertLogInfoToXML方法开头的断点被击中时,jsonOfLog是字符串的值(例如“简单字符串”)。
我尝试将action方法中jsonOfLog参数的类型更改为object类型:
[HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(object jsonOfLog)
现在,使用原始的JavaScript代码(我在其中传递了一个更复杂的“数据”对象),jsonOfLog获得了{object}的值。但是调试器不会在监视窗口中显示更多详细信息,并且我不知道可以使用什么方法对该变量进行操作。
如何将JSON数据传递到MVC控制器,其中传递的数据是字符串化的复杂对象?
谢谢,巴黎圣母院
问题是您dataType
和您的data
参数格式。我刚刚在沙盒中对此进行了测试,并且可以进行以下工作:
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, 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>
请特别注意data
,在发送文本时,您需要发送一个与参数名称匹配的变量。它不是很漂亮,但是它将为您提供令人垂涎的未格式化字符串。
运行此命令时,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,"two",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,"myArray":[1,"two",3]}
问题内容: 我正在努力,并努力通过JSON将数组发送到MVC控制器动作。 这是我所拥有的以及我已经尝试过的… 我该怎么做 ? 编辑:建议从顶部发送“按原样” 发送的邮件-不起作用。我在jquery框架的某处收到一个奇怪的异常:( 我认为这意味着它试图将null分配给它不能分配的东西。 编辑:我正在使用MVC2不是3 Edit2:@Monday的答案之后- 问题是由于我如何构建数组 而并非如此-关于
问题内容: 我正在尝试将JSON数组发布到MVC控制器。但是,无论我尝试什么,都为0或null。 我有包含文本框的表。我需要所有这些文本框中的ID和值作为对象。 这是我的Javascript: 这是我的查看代码: 这是控制器即时通讯试图接收数据以: 我究竟做错了什么? 问题答案: 您的代码有很多问题。让我们从标记开始。您有一个表,该表的每一行中都包含隐藏字段。除了您已经对那些隐藏元素的属性进行了硬
问题内容: 我试图实现对包含复杂对象作为参数的控制器操作方法的JQueryAJAX调用。我读了很多博客,并尝试了从中学习到的几种技巧。 我想触发一个异步发布,当用户在某个字段上制表符时调用该异步发布(不是表单保存发布–如我发现的其他示例所示)。 我的意图是: 在客户端上实例化一个对象(不是为View提供类型的ViewModel); 使用视图中多个字段中的数据填充对象; 将此对象转换为JSON; 使
我正在尝试从表单提交中获取数据。这是密码。 现在的问题是我无法将数据输入我想要的变量。此外,我认为数据是作为字符串而不是数组发送的。这是用于调试目的的警报(数据)的输出 {“问题名称”:“Test”,“pollingStatus”:“0”,“options”: {“1”:“Test7”,“2”:“Test8”,“3”:“Test9”,“4”:“Test10”,“5”:“Test11”},“code
我将JSON数据从jQuery传递到我的Java控制器,我正在使用,但我得到一个异常说: 组织。springframework。网状物HttpMediaTypeNotSupportedException:内容类型'application/x-www-form-urlencoded;字符集=UTF-8'不受支持 我传递的数据是: 我用来传递此数据的AJAX调用是: 我的Java控制器如下所示 我的P
我正在尝试使用POST提交表单,但我有一些来自 标记的额外数据,这些数据已存储到JS对象中。当我从JavaScript中点击时,我想把它发送到服务器。 我尝试做的是用事件发送