Ajax post возвращает пустой объект всегда контроллеру - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь сделать сообщение с использованием Ajax в моем приложении ASP.NET MVC, но объект всегда пуст.

Это действие моего контроллера:

[HttpPost]
public JsonResult Newinventary(InventaryAjax inventary)
{
    return Json(inventary);
}

Это в моем классе InventaryAjax:

    public string SerialNumber { get; set; }
    public decimal SupplierCode { get; set; }
    public string WithdrawalOrder { get; set; }
    public string EnterpriseDocument { get; set; }
    public string Description { get; set; }
    public int LerRaee { get; set; }
    public string Weigth { get; set; }
    public decimal Price { get; set; }
    public string GeneralComments { get; set; }
    public string HdserialsNumbers { get; set; }

Это мой звонок:

$("body").on("click", "#btnAdd", function () {
        var inventary = new Object();
        inventary.SupplierCode = $("#txtSupplier").val();
        inventary.WithdrawalOrder = $("#txtOrden").val();
        inventary.EnterpriseDocument = $("#txtDocumento").val();
        inventary.LerRaee = $("#txtLER").val();
        inventary.Weigth = $("#txtPeso").val();
        inventary.Description = $("#txtDescripcion").val();
        inventary.SerialNumber = $("#txtSN").val();
        inventary.HdserialsNumbers = $("#txtSNHDD").val();
        inventary.Price = $("#txtPrecio").val();
        inventary.GeneralComments = $("#txtObservaciones").val();
        $.ajax({
            type: "POST",
            url: "/Almacen/NewInventary",
            data: JSON.stringify(inventary),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (r) {
                var row = $("#tblInventary tr:last-child");
                if ($("#tblInventary tr:last-child span").eq(0).html() != " ") {
                    row = row.clone();
                }
                AppendRow(row, r.SupplierCode,
                    r.WithdrawalOrder, r.EnterpriseDocument,
                    r.LerRaee, r.Weigth, r.Description,
                    r.SerialNumber, r.HdserialsNumbers,
                    r.Price, r.GeneralComments);
                txtLER.val("");
                txtPeso.val("");
                txtDescripcion.val("");
                txtSN.val("");
                txtSNHDD.val("");
                txtPrecio.val("");
                txtObservaciones.val("");
            }
        });
    });

Я проверил почтовый звонок в браузере, и объект заполнен:

Description: "5"
EnterpriseDocument: "2"
GeneralComments: "9"
HdserialsNumbers: "7"
LerRaee: "3"
Price: "8"
SerialNumber: "6"
SupplierCode: "0"
Weigth: "4"
WithdrawalOrder: "1"

Но когда я проверяю метод, весь объект, полученный в контроллере, равен нулю

[ОБНОВЛЕНО] Я попытался изменить данные поста Ajax:

 $("body").on("click", "#btnAdd", function () {
            var inventary = new Object();
            inventary.SupplierCode = $("#txtSupplier").val();
            inventary.WithdrawalOrder = $("#txtOrden").val();
            inventary.EnterpriseDocument = $("#txtDocumento").val();
            inventary.LerRaee = $("#txtLER").val();
            inventary.Weigth = $("#txtPeso").val();
            inventary.Description = $("#txtDescripcion").val();
            inventary.SerialNumber = $("#txtSN").val();
            inventary.HdserialsNumbers = $("#txtSNHDD").val();
            inventary.Price = $("#txtPrecio").val();
            inventary.GeneralComments = $("#txtObservaciones").val();
            $.ajax({
                type: "POST",
                url: "/Almacen/NewInventary",
                data: {inventary : inventary },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (r) {
                    var row = $("#tblInventary tr:last-child");
                    if ($("#tblInventary tr:last-child span").eq(0).html() != " ") {
                        row = row.clone();
                    }
                    AppendRow(row, r.SupplierCode,
                        r.WithdrawalOrder, r.EnterpriseDocument,
                        r.LerRaee, r.Weigth, r.Description,
                        r.SerialNumber, r.HdserialsNumbers,
                        r.Price, r.GeneralComments);
                    txtLER.val("");
                    txtPeso.val("");
                    txtDescripcion.val("");
                    txtSN.val("");
                    txtSNHDD.val("");
                    txtPrecio.val("");
                    txtObservaciones.val("");
                }
            });
        });

Я проверяю и объект отправляется в сообщении:

enter image description here

Но JsonResult все еще получает пустой инвентарьAjax

enter image description here

[ОБНОВЛЕНИЕ 2]

Я изменяю данные, отправленные только в json, и тип данных, полученный в методе контроллера

public ActionResult InsertInventary(string data)
{
    InventaryAjax inventary = JsonConvert.DeserializeObject<InventaryAjax>(data);
    return Json(inventary);
}

$.ajax({
                type: "POST",
                url: '@Url.Action("InsertInventary","Almacen")',
                data: JSON.stringify(inventary) ,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (r) {
                    var row = $("#tblInventary tr:last-child");
                    if ($("#tblInventary tr:last-child span").eq(0).html() != "&nbsp;") {
                        row = row.clone();
                    }
                    AppendRow(row, r.SupplierCode,
                        r.WithdrawalOrder, r.EnterpriseDocument,
                        r.LerRaee, r.Weigth, r.Description,
                        r.SerialNumber, r.HdserialsNumbers,
                        r.Price, r.GeneralComments);
                    txtLER.val("");
                    txtPeso.val("");
                    txtDescripcion.val("");
                    txtSN.val("");
                    txtSNHDD.val("");
                    txtPrecio.val("");
                    txtObservaciones.val("");
                }
            });

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Это то, что я рекомендую,

Все еще используйте строку ниже

 data: JSON.stringify(inventary)

, но измените ваш контроллер на использование JsonConvert для десериализации объекта

[HttpPost]
public JsonResult Newinventary(string data)
{
    InventaryAjax inventary = JsonConvert.DeserializeObject<InventaryAjax>(data);
    return Json(inventary);
}

РЕДАКТИРОВАТЬ:

Используйте это для отправки

$.post("/Almacen/NewInventary",
    {
        data: JSON.stringify({
            data : inventory
        })
   },
   function (data, status) {
      console.log(data);
   });

также отладки в вашем контроллере, чтобы убедиться, что значение string данных поступает из AJAX.

0 голосов
/ 08 июля 2019

изменить эту строку

 data: JSON.stringify(inventary),

TO

data: {inventary : inventary } ,

вам не нужно указывать строковый объект

Я использую ваш код Я получаю всезначения

See here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...