通过jQuery将数组传递给MVC控制器
问题描述:
试图从我的jQuery脚本中将对象列表传递给我的MVC控制器。控制器没有得到名单。有任何想法吗?通过jQuery将数组传递给MVC控制器
脚本
function refreshXeroData(obj, planId, date, list) {
// list comes in as a serialized array
// list = "[{"Id":245225,"XeroFromDate":"4/22/2015 12:00:00 AM","XeroToDate":""},{"Id":245226,"XeroFromDate":"4/1/2016 12:00:00 AM","XeroToDate":"4/30/2016 12:00:00 AM"}]"
var model = { PlanId: planId, Date: date, List: list };
$.ajax({
type: 'POST',
url: url,
data: model,
success: function (data) {
// code removed for clarity
},
});
}
控制器
public JsonResult Refresh(int planId, DateTime date, List<XeroScenarioModel> list)
{
// list is null
// code removed for clarity
}
模型
public class XeroScenarioModel
{
public int Id { get; set; }
public string XeroFromDate { get; set; }
public string XeroToDate { get; set; }
}
答
替换此线
var model = { PlanId: planId, Date: date, List: list };
与此
var model = { planId: planId, date: date, list: JSON.parse(list) };
答
我通过您的代码去尝试以下提到的代码。
<script type="text/javascript">
function refreshXeroData() {
// list comes in as a serialized array
var planId = 1234;
var date = new Date();
list = '[{"Id":245225,"XeroFromDate":"4/22/2015 12:00:00 AM","XeroToDate":"4/30/2016 12:00:00 AM"},{"Id":245226,"XeroFromDate":"4/1/2016 12:00:00 AM","XeroToDate":"4/30/2016 12:00:00 AM"}]';
var model = { planId: planId, date: "4/30/2016 12:00:00 AM", list: JSON.parse(list) };
$.ajax({
type: 'POST',
url: '../../Sample/Refresh',
data: JSON.stringify(model),
contentType: "application/json",
success: function (data) {
// code removed for clarity
},
});
}
答
我在阵列上使用JSON.parse()来传递英寸
// list = "[{"Id":245225,"XeroFromDate":"4/22/2015 12:00:00 AM","XeroToDate":""},{"Id":245226,"XeroFromDate":"4/1/2016 12:00:00 AM","XeroToDate":"4/30/2016 12:00:00 AM"}]"
var model = { PlanId: planId, Date: date, List: JSON.parse(list) };
$.ajax({
type: 'POST',
url: url,
data: model,
success: function (data) {
// code removed for clarity
},
});
无需JSON.stringify()。
首先,我会尝试数据:json.stringify(模型)在ajax,有时帮助。接下来我会仔细看看日期。我怀疑你可以将JavaScript日期映射到C#DateTime对象上。我可能会创建该对象与它的日期部分(月,日,年,每个作为单独的值),然后根据这些值在控制器中创建DateTime对象。 – nurdyguy
如果您将列表作为已经序列化的字符串发送,则MVC模型绑定器可能将其解释为“字符串”而不是“List”。在将其添加到模型之前,请尝试列表字符串上的'json_decode'。 – jmoerdyk
添加'contentType:“application/json; charset = utf-8”,'并将其更改为'data:JSON.stringify(model)' –