Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC:2d数组从javascript传递到MVC控制器操作后为空_Javascript_Jquery_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

ASP.NET MVC:2d数组从javascript传递到MVC控制器操作后为空

ASP.NET MVC:2d数组从javascript传递到MVC控制器操作后为空,javascript,jquery,asp.net-mvc,asp.net-mvc-3,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 3,我有一个字符串的2d数组(12x5),我想从javascript函数传递到asp.net mvc控制器操作。使用IE中的开发人员工具,我知道数组中填充了我想要的内容,因此问题在于post函数中或其周围 var dateArray = new Array(); //Populate Data $.post("/Event/SetDateCalculationParameters", { dates: dateArray }, function () { //Stuff }); } 这是

我有一个字符串的2d数组(12x5),我想从javascript函数传递到asp.net mvc控制器操作。使用IE中的开发人员工具,我知道数组中填充了我想要的内容,因此问题在于post函数中或其周围

var dateArray = new Array();
//Populate Data

$.post("/Event/SetDateCalculationParameters", { dates: dateArray }, function () {
    //Stuff
});
}
这是MVC控制器的动作

public ActionResult SetDateCalculationParameters(string[][] dates)
    {
        //Do stuff

        return Json(true);
    }

在控制器操作中,dates数组中有12项,但它们都为null。我已经做了几个小时了,我被难住了。有没有更简单的方法?还是我遗漏了什么?

您可以将它们作为JSON请求发送:

var dateArray = new Array();
dateArray[0] = [ 'foo', 'bar' ];
dateArray[1] = [ 'baz', 'bazinga' ];
// ... and so on

$.ajax({
    url: '@Url.Action("SetDateCalculationParameters", "Event")',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ dates: dateArray }),
    success: function (result) {

    }
});
操作签名必须如下所示:

[HttpPost]
public ActionResult SetDateCalculationParameters(string[][] dates)

您可以将它们作为JSON请求发送:

var dateArray = new Array();
dateArray[0] = [ 'foo', 'bar' ];
dateArray[1] = [ 'baz', 'bazinga' ];
// ... and so on

$.ajax({
    url: '@Url.Action("SetDateCalculationParameters", "Event")',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ dates: dateArray }),
    success: function (result) {

    }
});
操作签名必须如下所示:

[HttpPost]
public ActionResult SetDateCalculationParameters(string[][] dates)

为了解决同样的问题,我创建了应应用于参数的JsonModelBinder和JsonModelAttribute:

public class JsonModelBinder : IModelBinder
    {
        private readonly static JavaScriptSerializer _serializer = new JavaScriptSerializer();

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var stringified = controllerContext.HttpContext.Request[bindingContext.ModelName];

       if (string.IsNullOrEmpty(stringified))
            return null;

        return _serializer.Deserialize(stringified, bindingContext.ModelType);
    }
}

public class FromJsonAttribute : CustomModelBinderAttribute
{
    public override IModelBinder GetBinder()
    {
        return new JsonModelBinder();
    }
}
您的控制器将如下所示:

public ActionResult SetDateCalculationParameters([FromJson]string[][] dates)
此外,还应将阵列字符串化:

$.post("/Event/SetDateCalculationParameters", { dates: JSON.stringify(dateArray)}, function () {             //Stuff         });         }

它适合我。

为了解决同样的问题,我创建了应应用于参数的JsonModelBinder和JsonModelAttribute:

public class JsonModelBinder : IModelBinder
    {
        private readonly static JavaScriptSerializer _serializer = new JavaScriptSerializer();

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var stringified = controllerContext.HttpContext.Request[bindingContext.ModelName];

       if (string.IsNullOrEmpty(stringified))
            return null;

        return _serializer.Deserialize(stringified, bindingContext.ModelType);
    }
}

public class FromJsonAttribute : CustomModelBinderAttribute
{
    public override IModelBinder GetBinder()
    {
        return new JsonModelBinder();
    }
}
您的控制器将如下所示:

public ActionResult SetDateCalculationParameters([FromJson]string[][] dates)
此外,还应将阵列字符串化:

$.post("/Event/SetDateCalculationParameters", { dates: JSON.stringify(dateArray)}, function () {             //Stuff         });         }

它适合我。

它在请求对象中的外观如何?只是想了解一下如何处理这件事?我不确定我是否明白。在发送js中的数据之前,您是否要求提供一个示例?值得一提的是,这个问题是用于传递交错数组的,而不是2d数组,该数组将被定义为字符串[,],它在请求对象中的外观如何?只是想了解一下如何处理这件事?我不确定我是否明白。在js中的数据被发送之前,您是否要求提供一个示例?值得一提的是,这个问题是关于传递交错数组的,而不是2d数组,它将被定义为字符串[,]。每当我尝试在action sig中使用数组时,它都将为null。当我用直起的绳子时,它起作用了。所以我只是把它解析成动作代码中的2d数组。我知道我在这里晚了很多,但我已经切换到使用ajax调用而不是post,并得到了我需要的结果。我觉得这可能与contentType有关。我还能够使用List parmName而不是string[][]parmName。只允许我使用foreach在数组中循环。任何时候我尝试在action sig中使用数组时,它都将为null。当我用直起的绳子时,它起作用了。所以我只是把它解析成动作代码中的2d数组。我知道我在这里晚了很多,但我已经切换到使用ajax调用而不是post,并得到了我需要的结果。我觉得这可能与contentType有关。我还能够使用List parmName而不是string[][]parmName。只允许我使用foreach在数组中循环。