C# 控制器中从ajax接收的数据为空?

C# 控制器中从ajax接收的数据为空?,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,当数据从ajax发送到控制器时,我在ProductData和ProductDetailsData中都接收到null。可能是什么问题 在控制器中: public bool UpdateProduct(Entity_Product ProductData, Entity_ProductDetails ProductDetailsData) { return Json(DrugService.UpdateProduct(ProductData, ProductDetailsData)); }

当数据从ajax发送到控制器时,我在ProductData和ProductDetailsData中都接收到null。可能是什么问题

在控制器中:

public bool UpdateProduct(Entity_Product ProductData, Entity_ProductDetails ProductDetailsData)
{
    return Json(DrugService.UpdateProduct(ProductData, ProductDetailsData));
}
在JS文件中:

$(document).on("click", "#btn_update", function () {

    //Prepare data
    var ProductDataArray = [];
    var ProductDetailsDataArray = []; 

    ProductDataArray.push({
        "Name": $('#txt_drugname').val(),
        "CommercialName": $('#txt_drugcommercialname').val(),
        "PackageType": $("#dd_packagetype option:selected").val(),
        "DrugType": $("#dd_drugtype option:selected").val(),
        "DrugCode": $('#txt_drugcode').val(),
        "ProductId": $('#hdn_productid').val(),
        "Administration": $('#txt_administration').val(),
        "Manufacturer": $('#txt_manufacturer').val(),
        "Price": $('#txt_price').val(),
        "Strength": $('#txt_stregnth').val(),
        "StregnthUnit": $("#dd_stregnthunit option:selected").val(), 
        "Barcode": $('#txt_barcode').val(),
        "IsEnabled": $("#dd_isenabled option:selected").val(),  
        "UpdatedOn": new Date(),
        "UpdatedBy": 'UserNme',
    });


    ProductDetailsDataArray.push({
        "ProductId": $('#hdn_productid').val(),
        "ProductDetailsId": $('#hdn_productdetailid').val(),
        "Length": $('#txt_Legnth').val(),
        "Width": $('#txt_width').val(),
        "Height": $('#txt_height').val(),
        "ConversionRate": $('#txt_conversion').val(),
        "DrugForm": $("#dd_drugform option:selected").val(),
        "StoredAs": $("#dd_storedas option:selected").val()
    });



    //Send data
    $.ajax({
        url: '/Drug/UpdateProduct/',
        type: 'POST', 
        data: { 'ProductData': ProductDataArray, 'ProductDetailsData': ProductDetailsDataArray },
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        success: function (data, textStatus, jqXHR) {

        }
    });
});

AJAX和控制器操作方法都存在一些问题:

1您试图使用contentType设置为application/json将数组传递到数据中,但没有先执行json.stringify,因此它无法工作,因为数组需要作为json字符串传递或使用传统的:true设置

2 action方法参数类型未设置为array,而是单个实体类,如viewmodel,您需要声明一个对象而不是数组

3控制器操作使用bool返回类型,该返回类型应使用JsonResult或ActionResult类型

根据上述错误,尝试使用如下设置:

jQuery

控制器动作


控制器应接收具有这两个属性ProductData和ProductDetailsData的对象,而不是单个对象。并将FROMBODY添加到控件中的对象之前。您正在传递带有一个项的数组,但需要单个对象。不要这样做:var ProductDataArray=[];改为这样做:var ProductDataArray={ProductId:$'hdn_ProductId'.val,…}@泰伯赛汀,它成功了!!谢谢
$(document).on("click", "#btn_update", function () {
    var ProductDataArray = {
        "Name": $('#txt_drugname').val(),
        "CommercialName": $('#txt_drugcommercialname').val(),
        "PackageType": $("#dd_packagetype option:selected").val(),
        "DrugType": $("#dd_drugtype option:selected").val(),
        "DrugCode": $('#txt_drugcode').val(),
        "ProductId": $('#hdn_productid').val(),
        "Administration": $('#txt_administration').val(),
        "Manufacturer": $('#txt_manufacturer').val(),
        "Price": $('#txt_price').val(),
        "Strength": $('#txt_stregnth').val(),
        "StregnthUnit": $("#dd_stregnthunit option:selected").val(), 
        "Barcode": $('#txt_barcode').val(),
        "IsEnabled": $("#dd_isenabled option:selected").val(),  
        "UpdatedOn": new Date(),
        "UpdatedBy": 'UserNme',
    };

    var ProductDetailsDataArray = {
        "ProductId": $('#hdn_productid').val(),
        "ProductDetailsId": $('#hdn_productdetailid').val(),
        "Length": $('#txt_Legnth').val(),
        "Width": $('#txt_width').val(),
        "Height": $('#txt_height').val(),
        "ConversionRate": $('#txt_conversion').val(),
        "DrugForm": $("#dd_drugform option:selected").val(),
        "StoredAs": $("#dd_storedas option:selected").val()
    };

    $.ajax({
        url: '/Drug/UpdateProduct/',
        type: 'POST', 
        data: JSON.stringify({ 'ProductData': ProductDataArray, 'ProductDetailsData': ProductDetailsDataArray }),
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        success: function (data, textStatus, jqXHR) {
            // do something
        }
    });
});
[HttpPost]
public ActionResult UpdateProduct(Entity_Product ProductData, Entity_ProductDetails ProductDetailsData)
{
    return Json(DrugService.UpdateProduct(ProductData, ProductDetailsData));
}