Asp.net mvc 为什么将JSON数组传递给控制器操作不起作用?
我的javascriptAsp.net mvc 为什么将JSON数组传递给控制器操作不起作用?,asp.net-mvc,json,asp.net-mvc-3,Asp.net Mvc,Json,Asp.net Mvc 3,我的javascript function SaveData(status) { var reserved = []; var id = -1; $('#fdEitDetail').find('table tr').each(function (index, item) { var isChk = $(item).find('input:checkbox').is(':checked') ? 0 : 1; id = $(item).attr
function SaveData(status) {
var reserved = [];
var id = -1;
$('#fdEitDetail').find('table tr').each(function (index, item) {
var isChk = $(item).find('input:checkbox').is(':checked') ? 0 : 1;
id = $(item).attr('name');
reserved.push({ ID: $(item).attr('id'), IsChecked: isChk, Comment: $(item).find('textarea').val() });
});
var dataset = JSON.stringify({ checkList: reserved, status: status, machineID: id });
$.ajax({
url: '/Home/UpdateData',
contentType: "application/json; charset=utf-8",
type: 'POST',
data: dataset,
success: function (result) {
alert(result);
}
});
}
我将此控制器称为操作:
public JsonResult UpdateData(string checkList, int status,int machineID)
{
var response =
new JavaScriptSerializer().Deserialize<List<PMICheckListRequest>>(checkList);
return Json("value = Success");
}
public ActionResult UpdateData(MyViewModel)
{
// NO NEED TO BE DOING ANY PLUMBING DESERIALIZATION HERE
// THE VIEW MODEL ALREADY CONTAINS EVERYTHING YOU NEED
return Json("value = Success");
}
在控制器中,ajax请求正在命中这两个
参数status
,machineID
具有我在javascript中设置的值,但checkList
始终是null
。checkList
参数之所以是null
是因为您试图将复杂对象JSON数组(即[{},{}]
)绑定到字符串上,当这些类型不真正兼容时
试试这个
public JsonResult UpdateData(
List<PMICheckListRequest> checkList,
int status,
int machineID)
{
return Json("value = Success");
}
public JsonResult UpdateData(
清单清单,
国际地位,
int machineID)
{
返回Json(“value=Success”);
}
您不必手动反序列化它;模型活页夹会帮你的
另外需要注意的是,创建一个视图模型以更有序的方式保存数据并不是一个坏主意,@DarinDimitrov显示
public JsonResult UpdateData(
PMICheckListRequestViewModel model)
{
return Json("value = Success");
}
...
public class PMICheckListRequestViewModel
{
public List<PMICheckListRequest> CheckList { get; set; }
public int Status { get; set; }
public int MachineID { get; set; }
}
public JsonResult UpdateData(
PMICheckListRequestViewModel(模型)
{
返回Json(“value=Success”);
}
...
公共类PMICheckListRequestViewModel
{
公共列表清单{get;set;}
公共int状态{get;set;}
public int MachineID{get;set;}
}
它在将来会更加灵活。检查表
参数之所以为null
,是因为您试图将复杂对象JSON数组(即[{},{}]
)绑定到字符串
,而这些类型实际上并不兼容
试试这个
public JsonResult UpdateData(
List<PMICheckListRequest> checkList,
int status,
int machineID)
{
return Json("value = Success");
}
public JsonResult UpdateData(
清单清单,
国际地位,
int machineID)
{
返回Json(“value=Success”);
}
您不必手动反序列化它;模型活页夹会帮你的
另外需要注意的是,创建一个视图模型以更有序的方式保存数据并不是一个坏主意,@DarinDimitrov显示
public JsonResult UpdateData(
PMICheckListRequestViewModel model)
{
return Json("value = Success");
}
...
public class PMICheckListRequestViewModel
{
public List<PMICheckListRequest> CheckList { get; set; }
public int Status { get; set; }
public int MachineID { get; set; }
}
public JsonResult UpdateData(
PMICheckListRequestViewModel(模型)
{
返回Json(“value=Success”);
}
...
公共类PMICheckListRequestViewModel
{
公共列表清单{get;set;}
公共int状态{get;set;}
public int MachineID{get;set;}
}
它将在将来被证明更加灵活。只需使用一个视图模型,并停止在需要解析的字符串周围徘徊:
public class MyViewModel
{
public PMICheckListRequest[] CheckList { get; set; }
public int Status { get; set; }
public int MachineID { get; set; }
}
作为控制器操作的参数:
public JsonResult UpdateData(string checkList, int status,int machineID)
{
var response =
new JavaScriptSerializer().Deserialize<List<PMICheckListRequest>>(checkList);
return Json("value = Success");
}
public ActionResult UpdateData(MyViewModel)
{
// NO NEED TO BE DOING ANY PLUMBING DESERIALIZATION HERE
// THE VIEW MODEL ALREADY CONTAINS EVERYTHING YOU NEED
return Json("value = Success");
}
请注意,视图模型已经包含一个
PMICheckListRequest
数组,其中每个元素都有属性ID
,IsChecked
和Comment
,您已经在AJAX请求中填充了这些属性。只需使用一个视图模型,并停止挂起需要解析的字符串:
public class MyViewModel
{
public PMICheckListRequest[] CheckList { get; set; }
public int Status { get; set; }
public int MachineID { get; set; }
}
作为控制器操作的参数:
public JsonResult UpdateData(string checkList, int status,int machineID)
{
var response =
new JavaScriptSerializer().Deserialize<List<PMICheckListRequest>>(checkList);
return Json("value = Success");
}
public ActionResult UpdateData(MyViewModel)
{
// NO NEED TO BE DOING ANY PLUMBING DESERIALIZATION HERE
// THE VIEW MODEL ALREADY CONTAINS EVERYTHING YOU NEED
return Json("value = Success");
}
请注意,视图模型已经包含一个PMICheckListRequest
数组,其中每个元素都有属性ID
,IsChecked
和Comment
,您已经在AJAX请求中填充了这些属性