Данные, полученные в контроллере от ajax, равны NULL? - PullRequest
0 голосов
/ 16 января 2019

Я получаю нулевое значение как в ProductData, так и в ProductDetailsData, когда данные отправляются из ajax в контроллер. В чем может быть проблема?

В контроллере:

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 голосов
/ 16 января 2019

У вас есть несколько проблем как в AJAX, так и в методе действия контроллера:

1) Вы пытались передать массивы в data, используя contentType, установленный на application/json, не выполняя сначала JSON.stringify(), поэтому он не будет работать, поскольку массив должен передавать либо в виде строки JSON, либо использовать traditional: true настройка.

2) Типы параметров метода действия устанавливаются не в массив, а в один класс сущностей, такой как viewmodel, вам нужно объявить объект вместо массива.

3) Действие контроллера использует bool тип возврата, который должен использовать тип JsonResult (или ActionResult).

Исходя из упомянутых выше ошибок, попробуйте использовать настройку, как показано ниже:

JQuery

$(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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...