我看到了类似的问题,但没有人帮助我。 我有最简单的代码:
public JsonResult JsonGetStatesInfo(object[] instructions)
{
if (Request.IsAjaxRequest())
{
return Json(String.Empty);
}
else
throw new NoAjaxRequestException();
}
和客户方:
var instructions = [];
instructions.push('abc');
instructions.push('ddd');
instructions.push('assdbc');
var inst = JSON.stringify(instructions);
$.ajax({
cache: false,
data: { 'instructions': inst },
traditional: true,
dataType: 'json',
url: '/State/JsonGetStatesInfo',
type: 'post',
success: function (resp) {
},
error: function (data) {
alert(data.error);
}
});
在客户端,我尝试使用JSON.stringify,没有JSON.stringify,传统:true,没有传统:true
在服务器端我尝试作为参数:object [],object,List<对象>,列表< string>,IEnumerable<字符串>等
没有任何效果!如何正确地做到这一点?
解决: 我的问题很简单 - 一个来自数组的实际值的HTML标签。只需要将[ValidateInput(false)]添加到操作方法
答案 0 :(得分:2)
public ActionResult JsonGetStatesInfo(string[] instructions)
{
return new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { result = instructions.Length}
};
}
客户端
var instructions = ['abc', 'dcs', 'arr'];
$.post('/State/JsonGetStatesInfo', { instructions: instructions },
function (data) {
if (data.result!= null && data.result!= undefined) {
alert(data.result);
}
});
试试这个......
答案 1 :(得分:1)
至少,您可以将javascript数组作为字符串传递并在控制器中反序列化
public JsonResult JsonGetStatesInfo(string instructions)
var instructionsArray= JsonConvert.DeserializeObject<string[]>(instructions);
或者使用新的数组,如下所述:https://stackoverflow.com/a/310136/3063094
答案 2 :(得分:1)
您只需要以下设置:
public JsonResult MyAction(string[] instructions)
{
// Your codes
}
的数组传递给MVC Action:<强>控制器:强>
$.ajax({
data: { 'instructions': ['abc', 'dcs', 'arr'] }, // << Without JSON.stringify
traditional: true, // << Important line
url: '/State/MyAction',
type: 'post',
dataType: 'json',
success: function (resp) {
// Your codes
}
});
查看:强>
contentType: "application/json; charset=utf-8"
也建议使用
int
。
array of int
的数组传递给MVC Action:此外,我使用以下代码将Action
转换为public JsonResult MyAction(int[] instructions)
{
// Your codes
}
<强>控制器:强>
$.ajax({
data: { 'instructions': [1, 2, 3] }, // << Without JSON.stringify
traditional: true, // << Important line
url: '/State/MyAction',
type: 'get',
dataType: 'json',
success: function (resp) {
// Your codes
}
});
查看:强>
script
答案 3 :(得分:0)
尝试添加:
contentType: "application/json; charset=utf-8"
给你AJAX打电话,请删除:
JSON.stringify(instructions);
因为您正在尝试对对象进行字符串化,该对象将作为字符串而不是对象发送到服务器(并且服务器端需要对象)。
你也可以删除
traditional: true,
ache: false,