ASP.NET MVC:2d数组从javascript传递到MVC控制器操作后为空
我有一个字符串的2d数组(12x5),我想从javascript函数传递到asp.net mvc控制器操作。使用IE中的开发人员工具,我知道数组中填充了我想要的内容,因此问题在于post函数中或其周围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 }); } 这是
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在数组中循环。