簡體   English   中英

ASP.NET Core 中的 MVC 控制器的 AJAX POST 數據在傳遞超過一定長度的對象數組時始終為空

[英]AJAX POST Data to MVC Controller in ASP.NET Core Always Null When Passing An Object Array Over a Certain Length

我有一個 javascript 函數,它正在創建一個包含對象數組的模型,並使用 AJAX POST 請求將該數據發送到我的 MVC 控制器。 出於某種原因,似乎可以傳遞給控制器​​的數組的大小有限制,盡管經過實驗,在我的情況下似乎在 450 到 500 個對象之間。 一旦它大於該閾值,控制器將只收到一個空值。 是否有一些配置或解決方法可以消除或解決此限制?

我已經嘗試了幾個基於 web.config 的“解決方案”,很多人在類似的 SO 問題上提出了這些解決方案,但無濟於事(我認為這些可能僅適用於 .Net Framework 的 ASP.NET 版本,而不適用於 .NET Core) .

Javascript:

var i = 0;
$("#SupplierNumber option").each(function () {
    var supplierNumber = {};
    supplierNumber.Value = $(this).val();
    supplierNumber.text = $(this).val();
    supplierNumbers.push(supplierNumber);
    //Below limits max size for testing
    i = i + 1;
    if (i > 450) {
        return false;
    }
});

//Other non-array values gathered here
var model = {
    "SupplierNumbers": supplierNumbers,
    //... other non-array values added to model
}

$.ajax({
    type: "POST",
    url: "/Administration/TestPost",
    data: model,
    dataType: "json",
    success: function (data) {
        alert("Finished");
    }
});

控制器:

[HttpPost]
public async Task<IActionResult> TestPost(TestViewModel model)
{
    //model is null here when array is > 500 in size 
    return Json(new { success = true });
}

我有一個javascript函數,該函數正在創建一個包含對象數組的模型,並使用AJAX POST請求將該數據發送到我的MVC控制器。 出於某種原因,似乎可以傳遞給控制器​​的數組的大小受到限制,盡管經過實驗,在我看來,這個大小似乎在450到500個對象之間。 一旦大於該閾值,控制器將只收到一個空值。 是否有一些配置或變通辦法可以消除或解決此限制?

我已經嘗試了許多基於web.config的“解決方案”,很多人都對類似的SO問題提出了建議(我認為這些解決方案僅適用於.NET Framework版本的ASP.NET,不適用於.NET Core)。 。

Javascript:

var i = 0;
$("#SupplierNumber option").each(function () {
    var supplierNumber = {};
    supplierNumber.Value = $(this).val();
    supplierNumber.text = $(this).val();
    supplierNumbers.push(supplierNumber);
    //Below limits max size for testing
    i = i + 1;
    if (i > 450) {
        return false;
    }
});

//Other non-array values gathered here
var model = {
    "SupplierNumbers": supplierNumbers,
    //... other non-array values added to model
}

$.ajax({
    type: "POST",
    url: "/Administration/TestPost",
    data: model,
    dataType: "json",
    success: function (data) {
        alert("Finished");
    }
});

控制器:

[HttpPost]
public async Task<IActionResult> TestPost(TestViewModel model)
{
    //model is null here when array is > 500 in size 
    return Json(new { success = true });
}

我有一個javascript函數,該函數正在創建一個包含對象數組的模型,並使用AJAX POST請求將該數據發送到我的MVC控制器。 出於某種原因,似乎可以傳遞給控制器​​的數組的大小受到限制,盡管經過實驗,在我看來,這個大小似乎在450到500個對象之間。 一旦大於該閾值,控制器將只收到一個空值。 是否有一些配置或變通辦法可以消除或解決此限制?

我已經嘗試了許多基於web.config的“解決方案”,很多人都對類似的SO問題提出了建議(我認為這些解決方案僅適用於.NET Framework版本的ASP.NET,不適用於.NET Core)。 。

Javascript:

var i = 0;
$("#SupplierNumber option").each(function () {
    var supplierNumber = {};
    supplierNumber.Value = $(this).val();
    supplierNumber.text = $(this).val();
    supplierNumbers.push(supplierNumber);
    //Below limits max size for testing
    i = i + 1;
    if (i > 450) {
        return false;
    }
});

//Other non-array values gathered here
var model = {
    "SupplierNumbers": supplierNumbers,
    //... other non-array values added to model
}

$.ajax({
    type: "POST",
    url: "/Administration/TestPost",
    data: model,
    dataType: "json",
    success: function (data) {
        alert("Finished");
    }
});

控制器:

[HttpPost]
public async Task<IActionResult> TestPost(TestViewModel model)
{
    //model is null here when array is > 500 in size 
    return Json(new { success = true });
}

我有一個javascript函數,該函數正在創建一個包含對象數組的模型,並使用AJAX POST請求將該數據發送到我的MVC控制器。 出於某種原因,似乎可以傳遞給控制器​​的數組的大小受到限制,盡管經過實驗,在我看來,這個大小似乎在450到500個對象之間。 一旦大於該閾值,控制器將只收到一個空值。 是否有一些配置或變通辦法可以消除或解決此限制?

我已經嘗試了許多基於web.config的“解決方案”,很多人都對類似的SO問題提出了建議(我認為這些解決方案僅適用於.NET Framework版本的ASP.NET,不適用於.NET Core)。 。

Javascript:

var i = 0;
$("#SupplierNumber option").each(function () {
    var supplierNumber = {};
    supplierNumber.Value = $(this).val();
    supplierNumber.text = $(this).val();
    supplierNumbers.push(supplierNumber);
    //Below limits max size for testing
    i = i + 1;
    if (i > 450) {
        return false;
    }
});

//Other non-array values gathered here
var model = {
    "SupplierNumbers": supplierNumbers,
    //... other non-array values added to model
}

$.ajax({
    type: "POST",
    url: "/Administration/TestPost",
    data: model,
    dataType: "json",
    success: function (data) {
        alert("Finished");
    }
});

控制器:

[HttpPost]
public async Task<IActionResult> TestPost(TestViewModel model)
{
    //model is null here when array is > 500 in size 
    return Json(new { success = true });
}

在使用 JSON.stringify 之前試試這個!

我遇到了完全相同的問題。 我需要做的就是以下幾點:

在我的 Startup.cs 中,我在ConfigureServices 中添加了以下幾行:

services.Configure<FormOptions>(options =>
        {
            options.ValueCountLimit = int.MaxValue;
            options.ValueLengthLimit = int.MaxValue;
        });

我有一個javascript函數,該函數正在創建一個包含對象數組的模型,並使用AJAX POST請求將該數據發送到我的MVC控制器。 出於某種原因,似乎可以傳遞給控制器​​的數組的大小受到限制,盡管經過實驗,在我看來,這個大小似乎在450到500個對象之間。 一旦大於該閾值,控制器將只收到一個空值。 是否有一些配置或變通辦法可以消除或解決此限制?

我已經嘗試了許多基於web.config的“解決方案”,很多人都對類似的SO問題提出了建議(我認為這些解決方案僅適用於.NET Framework版本的ASP.NET,不適用於.NET Core)。 。

Javascript:

var i = 0;
$("#SupplierNumber option").each(function () {
    var supplierNumber = {};
    supplierNumber.Value = $(this).val();
    supplierNumber.text = $(this).val();
    supplierNumbers.push(supplierNumber);
    //Below limits max size for testing
    i = i + 1;
    if (i > 450) {
        return false;
    }
});

//Other non-array values gathered here
var model = {
    "SupplierNumbers": supplierNumbers,
    //... other non-array values added to model
}

$.ajax({
    type: "POST",
    url: "/Administration/TestPost",
    data: model,
    dataType: "json",
    success: function (data) {
        alert("Finished");
    }
});

控制器:

[HttpPost]
public async Task<IActionResult> TestPost(TestViewModel model)
{
    //model is null here when array is > 500 in size 
    return Json(new { success = true });
}

暫無
暫無

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

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