ASP.Net MVC: как передать данные с помощью jquery ajax от клиента в действие asp.net mvc - PullRequest
0 голосов
/ 26 сентября 2018

Я вызываю действие mvc с помощью jquery и передаю два массива.я видел, что мое действие вызывается, но никакие правильные данные не передаются в действие.shipmentkey и BOLPdfInputs обнуляются на уровне действия.Скажите, пожалуйста, где я допустил ошибку?

Вот мой код

[HttpGet]
public PdfResult DownloadPdf(List<string> shipmentkey, List<BOLPdfInputs> BOLPdfInputs)
{

}

$('#btnSave').on('click', function () {
    alert('hello')
    debugger;
    var shipmentkeys = [];
    var BOLPdfInputs = [];

    var BOLPdfInput = new Object();

    var totalbol = $("[id^=mainDivContainer_]").length;

    for (var i = 0; i <= totalbol - 1; i++) {
        var shipmentkey = $('#hiddenshipmentkey_' + (i + 1)).val();
        shipmentkeys.push(shipmentkey);
    }

    for (var i = 0; i <= totalbol - 1; i++) {
        var BOLPdfInput = {
            AgreedValue1:               ($('#txtAgreedValue1_' + (i + 1)).val() != '' ? $('#txtAgreedValue1_' + (i + 1)).val() : ''),
            AgreedValue2:               ($('#txtAgreedValue2_' + (i + 1)).val() != '' ? $('#txtAgreedValue2_' + (i + 1)).val() : ''),
            CodAmount:                  ($('#txtCodAmount_' + (i + 1)).val() != '' ? $('#txtCodAmount_' + (i + 1)).val() : ''),
            ShipperSignature:           ($('#txtShipperSignature_' + (i + 1)).val() != '' ? $('#txtShipperSignature_' + (i + 1)).val() : ''),

            FreeTermsCollect:           ($('#ChkFreeTermsCollect_' + (i + 1)).val() != '' ? $('#ChkFreeTermsCollect_' + (i + 1)).val() : ''),
            FreeTermsPrePaid:           ($('#ChkFreeTermsPrePaid_' + (i + 1)).val() != '' ? $('#ChkFreeTermsPrePaid_' + (i + 1)).val() : ''),
            FreeTermsCustomerCheque:    ($('#ChkFreeTermsCustomerCheque_' + (i + 1)).val() != '' ? $('#ChkFreeTermsCustomerCheque_' + (i + 1)).val() : ''),

            TrailerByShipper:           ($('#ChkTrailerByShipper_' + (i + 1)).val() != '' ? $('#ChkTrailerByShipper_' + (i + 1)).val() : ''),
            FreightByShipper:           ($('#ChkFreightByShipper_' + (i + 1)).val() != '' ? $('#ChkFreightByShipper_' + (i + 1)).val() : ''),
            TrailerByDriver:            ($('#ChkTrailerByDriver_' + (i + 1)).val() != '' ? $('#ChkTrailerByDriver_' + (i + 1)).val() : ''),
            FreightByDriverPallets:     ($('#ChkFreightByDriverPallets_' + (i + 1)).val() != '' ? $('#ChkFreightByDriverPallets_' + (i + 1)).val() : ''),
            FreightByDriverPieces:      ($('#ChkFreightByDriverPieces_' + (i + 1)).val() != '' ? $('#ChkFreightByDriverPieces_' + (i + 1)).val() : '')

        };
        BOLPdfInputs.push(BOLPdfInput);
    }

    $.ajax({
        type: "GET",
        url: '@Url.Action("DownloadBOLPdf", "Shipment")',
        //data: '{ "shipmentkey":' + JSON.stringify(shipmentkeys) + '}',
        data: JSON.stringify({ shipmentkey: shipmentkeys, BOLPdfInputs: BOLPdfInputs }),
        success: function (data) {
            alert('Hello');
        },
        dataType: "json",
    });
});

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

изменить код, но все еще не работает.

Iвнесены некоторые изменения в код, как вы сказали, например, действие должно быть post type и contentType: 'application / json' .но все еще не работает.после выполнения действия типа POST теперь он не вызывается.

Сэр, пожалуйста, посмотрите и скажите, что мне нужно изменить в коде, в результате должен быть вызван мой код на стороне сервера, и данные должны быть правильно переданыдействие.

$('#btnSave').on('click', function () {
            alert('hello11')
            debugger;
            var shipmentkeys = [];
            var BOLPdfInputs = [];

            var BOLPdfInput = new Object();

            var totalbol = $("[id^=mainDivContainer_]").length;

            for (var i = 0; i <= totalbol - 1; i++) {
                var shipmentkey = $('#hiddenshipmentkey_' + (i + 1)).val();
                shipmentkeys.push(shipmentkey);
            }

            for (var i = 0; i <= totalbol - 1; i++) {
                var BOLPdfInput = {
                    AgreedValue1:               ($('#txtAgreedValue1_' + (i + 1)).val() != '' ? $('#txtAgreedValue1_' + (i + 1)).val() : ''),
                    AgreedValue2:               ($('#txtAgreedValue2_' + (i + 1)).val() != '' ? $('#txtAgreedValue2_' + (i + 1)).val() : ''),
                    CodAmount:                  ($('#txtCodAmount_' + (i + 1)).val() != '' ? $('#txtCodAmount_' + (i + 1)).val() : 0),
                    ShipperSignature:           ($('#txtShipperSignature_' + (i + 1)).val() != '' ? $('#txtShipperSignature_' + (i + 1)).val() : ''),

                    FreeTermsCollect:           ($('#ChkFreeTermsCollect_' + (i + 1)).is(":checked") ? 1 : 0),
                    FreeTermsPrePaid:           ($('#ChkFreeTermsPrePaid_' + (i + 1)).is(":checked") ? 1 : 0),
                    FreeTermsCustomerCheque:    ($('#ChkFreeTermsCustomerCheque_' + (i + 1)).is(":checked") ? 1 : 0),

                    TrailerByShipper:           ($('#ChkTrailerByShipper_' + (i + 1)).is(":checked") ? 1 : 0),
                    FreightByShipper:           ($('#ChkFreightByShipper_' + (i + 1)).is(":checked") ? 1 : 0),
                    TrailerByDriver:            ($('#ChkTrailerByDriver_' + (i + 1)).is(":checked") ? 1 : 0),
                    FreightByDriverPallets:     ($('#ChkFreightByDriverPallets_' + (i + 1)).is(":checked") ? 1 : 0),
                    FreightByDriverPieces:      ($('#ChkFreightByDriverPieces_' + (i + 1)).is(":checked") ? 1 : 0)

                };

                BOLPdfInputs.push(BOLPdfInput);
            }

            alert(JSON.stringify(BOLPdfInputs));

            //shipmentkey: JSON.stringify(shipmentkeys),

            $.ajax({
                type: "POST",
                url: '@Url.Action("DownloadBOLPdf", "Shipment")',
                data: { shipmentkey: JSON.stringify(shipmentkeys), BOLPdfInputs: JSON.stringify(BOLPdfInputs) },
                success: function (data) {
                    alert('Hello');
                },
            dataType: "json",
            contentType: 'application/json'

            });
        });

Мое действие

[HttpPost]
public PdfResult DownloadBOLPdf(List<string> shipmentkey, List<BOLPdfInputs> BOLPdfInputs)
{

}

public class BOLPdfInputs
{
    public BOLPdfInputs();

    public string AgreedValue1 { get; set; }
    public string AgreedValue2 { get; set; }
    public decimal? CodAmount { get; set; }
    public int? FreeTermsCollect { get; set; }
    public int? FreeTermsCustomerCheque { get; set; }
    public int? FreeTermsPrePaid { get; set; }
    public int? FreightByDriverPallets { get; set; }
    public int? FreightByDriverPieces { get; set; }
    public int? FreightByShipper { get; set; }
    public string ShipperSignature { get; set; }
    public int? TrailerByDriver { get; set; }
    public int? TrailerByShipper { get; set; }
}

1 Ответ

0 голосов
/ 26 сентября 2018

Сначала вы должны изменить имя вашего метода, потому что ваш URL неверен - DownloadPdf = DownloadBOLPdf

[HttpGet]
public PdfResult DownloadBOLPdf(List<string> shipmentkey, List<BOLPdfInputs> BOLPdfInputs)
{

}

Во второй попробуйте это

$('#btnSave').on('click', function () {
    ..................................
     ................................
    $.ajax({
        type: "GET",
        //url: '@Url.Action("DownloadBOLPdf", "Shipment")',
        url: '/Shipment/DownloadBOLPdf',
        //data: '{ "shipmentkey":' + JSON.stringify(shipmentkeys) + '}',
        //data: JSON.stringify({ shipmentkey: arr, BOLPdfInputs: obj }),
        data: { shipmentkey: JSON.stringify(shipmentkeys), BOLPdfInputs: JSON.stringify(BOLPdfInputs) },
        success: function (data) {
            alert('Hello');
        },
        dataType: "json",
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...