通过AJAX将数组传递给Controller Action

时间:2017-02-16 10:24:36

标签: c# json ajax asp.net-mvc

我看到了类似的问题,但没有人帮助我。 我有最简单的代码:

    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)]添加到操作方法

4 个答案:

答案 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)

您只需要以下设置:

通过Ajax将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

通过Ajax将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,