Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 为什么将JSON数组传递给控制器操作不起作用?_Asp.net Mvc_Json_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 为什么将JSON数组传递给控制器操作不起作用?

Asp.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

我的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('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请求中填充了这些属性