5 回答

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
在使用 JSON.stringify 之前試試這個(gè)!
我有完全相同的問題。我需要做的就是以下幾點(diǎn):
在我的 Startup.cs 中,我在ConfigureServices中添加了以下幾行:
services.Configure<FormOptions>(options => { options.ValueCountLimit = int.MaxValue; options.ValueLengthLimit = int.MaxValue; });

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
我不知道確切的問題是什么,但您可以嘗試此解決方案。在將字符串反序列化為對象之后,嘗試將數(shù)據(jù)作為刺痛傳遞到操作中。
var model = {
"SupplierNumbers": supplierNumbers,
//... other non-array values added to model
}
$.ajax({
type: "POST",
url: "/Administration/TestPost",
data: {"data":JSON.stringify(model)},
dataType: "json",
success: function (data) {
alert("Finished");
}
});
在控制器端,您可以將此字符串反序列化以進(jìn)行建模。
[HttpPost]
public async Task<IActionResult> TestPost(string data)
{
TestViewModel model=DeserializeObject<TestViewModel>(data);
return Json(new { success = true });
}

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
我們需要設(shè)置值計(jì)數(shù)限制和長度。
請?jiān)?startup.cs 中添加以下代碼 --- 它對我有用
services.AddMvc(options =>
{
options.MaxModelBindingCollectionSize = 100000;
});
services.Configure<FormOptions>(options =>
{
options.ValueCountLimit = int.MaxValue;
options.ValueLengthLimit = int.MaxValue;
options.MultipartHeadersLengthLimit = int.MaxValue;
});

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
這里有兩個(gè)解決方案:
首先demo,使用json類型的數(shù)據(jù),ajax中我們通常使用這種方式傳遞array(傳遞json類型的數(shù)據(jù),需要contentType: 'application/json'在ajax中使用,在action中使用[FromBody]):
索引視圖模型:
public class IndexViewModel
? ? {
? ? ? ? public int Id { get; set; }
? ? ? ? public string Name { get; set; }
? ? }
控制器:
? ? ? ? [HttpGet]
? ? ? ? public IActionResult TestAjax() {
? ? ? ? ? ? return View();
? ? ? ? }
? ? ? ? [HttpPost]
? ? ? ? public IActionResult TestAjaxWithJsonData([FromBody]List<IndexViewModel> l) {
? ? ? ? ? ? return Ok();
? ? ? ? }
看法:
?<button onclick="postdata1()">submit(jsondata)</button>
? ??
? ??
@section scripts{?
? ? <script type="text/javascript">
? ? ? ? function postdata1() {
? ? ? ? ? ? var a = [];
? ? ? ? ? ? for (var i = 0; i < 500; i++) {
? ? ? ? ? ? ? ? var indexViewModel = {};
? ? ? ? ? ? ? ? indexViewModel.Id = i;
? ? ? ? ? ? ? ? indexViewModel.Name = "name" + i;
? ? ? ? ? ? ? ? a.push(indexViewModel);
? ? ? ? ? ? }
? ? ? ? ? ? var data = JSON.stringify(a);
? ? ? ? ? ? $.ajax({
? ? ? ? ? ? ? ? type: "POST",
? ? ? ? ? ? ? ? url: 'TestAjaxWithJsonData',
? ? ? ? ? ? ? ? data: data,
? ? ? ? ? ? ? ? contentType: 'application/json'
? ? ? ? ? ? }).done(function (data) {
? ? ? ? ? ? });
? ? ? ? }
? ? </script>
}
第二個(gè)演示,使用 FormData:
控制器:
[HttpPost]
? ? public IActionResult TestAjaxWithFormdata(List<IndexViewModel> l)
? ? {
? ? ? ? return Ok();
? ? }
看法:
<button onclick="postdata2()">submit(formdata)</button>
? ??
? ??
@section scripts{?
? ? <script type="text/javascript">
? ? ? ??
? ? ? ? function postdata2() {
? ? ? ? ? ? var formdata = new FormData();
? ? ? ? ? ? for (var i = 0; i < 500; i++) {
? ? ? ? ? ? ? ? formdata.append("l[" + i + "].Id", i);
? ? ? ? ? ? ? ? formdata.append("l[" + i + "].Name", "name" + i);
? ? ? ? ? ? }
? ? ? ? $.ajax({
? ? ? ? ? ? ? ? type: "POST",
? ? ? ? ? ? ? ? url: 'TestAjaxWithFormdata',
? ? ? ? ? ? ? ? cache: false,
? ? ? ? ? ? ? ? contentType: false,
? ? ? ? ? ? ? ? processData: false,
? ? ? ? ? ? ? ? data: formdata,
? ? ? ? ? ? ?}).done(function (data) {
? ? ? ? });
? ? ? ? }
? ? ? ??
? ? </script>
}

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
經(jīng)過更多搜索后,我發(fā)現(xiàn)這是 ASP.NET Core 中的配置問題。默認(rèn)情況下,復(fù)雜模型中可以綁定的最大值數(shù)為 1024。在 Startup 類的 ConfigureServices 方法中添加以下選項(xiàng)將允許您將此限制增加到您需要的任何值 。
services.AddMvc(options?=>{ ???options.MaxModelBindingCollectionSize?=?100000; })
另外,我發(fā)現(xiàn)人們在面對這個(gè)問題時(shí)可能會發(fā)現(xiàn)有用的其他東西,但是使用表單提交操作,是下面的選項(xiàng),它采用與上面提到的相同的方法(source)。
services.Configure<FormOptions>(options?=>?options.ValueCountLimit?=?100000);
添加回答
舉報(bào)