簡體   English   中英

通過AJAX POST將JSON傳遞給具有多個模型和/或參數的控制器

[英]Passing JSON to a Controller with Multiple Models and/or Parameters via AJAX POST

我寫了這個控制器:

[HttpPost]
    public JsonResult CheckOut(List<POS_model> pos, double totalPayment)
    {
        try
        {
            var json = JsonConvert.SerializeObject(pos);
            DataTable posTable = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
            posTable.Columns["discount_percent"].ColumnName = @"Discount %";

            POS m_pos = new POS();
            m_pos.Data = posTable;
            m_pos.totalPayment = totalPayment;
            m_pos.CheckOut();

            return Json(new
            {
                Status = "Success"
            });
        }
        catch
        {
            return Json(new
            {
                Status = "Fail"
            });
        }
    }

我嘗試編寫此AJAX腳本來調用參數並將其提交給Controller :(但不起作用)

var totalPay = 1000;
var GatherPosItems = $('#tblPOS').tableToJSON();

$.ajax({
        type: 'POST',
        data: JSON.stringify(GatherPosItems)+"&totalPayment="+totalPay,
        url: '@Url.Action("CheckOut", "POS")',
        dataType: "json",
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            alert('Success');
        },
        error: function (req, status, errorObj) {
            alert(errorObj.toString());
        }
        });

GatherPosItems是帶有多個“行”或對象的JSON,因此它是一個數組。

我添加了一個參數totalPayment

如何將GatherPosItemstotalPaymenttotalPayment給控制器?

我的模特:

public class POS_model
{
        public string Qty { get; set; }
        public string description { get; set; }
        public string price { get; set; }
        public string discount_percent { get; set; }
        public string Discount_amount { get; set; }
        public string Discounted_price { get; set; }
        public string Line_total { get; set; }
        public string is_vat { get; set; }
        public string track_type { get; set; }
        public string item_line_id { get; set; }
        public string id { get; set; }
        public string sale_code { get; set; }
        public string reference { get; set; }
        public string unit_of_measure { get; set; }
        public string location { get; set; }
        public string item_code { get; set; }
}

我的GatherPosItems的結果: 在此處輸入圖片說明

您將非JSON字符串( &totalPayment="+totalPay )連接到從JSON.stringify函數返回的JSON,這將破壞發送到服務器的數據格式,並使模型綁定程序無法解析它。

以下應該工作:

$.ajax({
    type: 'POST',
    data: JSON.stringify({pos: GatherPosItems, totalPayment: totalPay}),
    url: '@Url.Action("CheckOut", "POS")',
    dataType: "json",
    contentType: 'application/json; charset=utf-8',
    success: function(data) {
        alert('Success');
    },
    error: function(req, status, errorObj) {
        alert(errorObj.toString());
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM