在控制器中从ajax接收的数据为NULL?

时间:2019-01-16 03:21:41

标签: 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));
}

在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) {

        }
    });
});

1 个答案:

答案 0 :(得分:1)

AJAX和控制器操作方法都存在几个问题:

1)您尝试使用设置为{{1}的data而不首先执行contentType来将数组传递到application/json,因此,由于数组需要作为JSON字符串或使用JSON.stringify()设置进​​行传递。

2)动作方法的参数类型未设置为数组,而是单个实体类(如viewmodel),您需要声明一个对象而不是数组。

3)控制器操作使用traditional: true返回类型,该类型应使用bool(或JsonResult)类型。

基于上述错误,请尝试使用以下设置:

jQuery

ActionResult

控制器操作

$(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
        }
    });
});