5 回答
TA贡献1835条经验 获得超7个赞
在使用 JSON.stringify 之前试试这个!
我有完全相同的问题。我需要做的就是以下几点:
在我的 Startup.cs 中,我在ConfigureServices中添加了以下几行:
services.Configure<FormOptions>(options => { options.ValueCountLimit = int.MaxValue; options.ValueLengthLimit = int.MaxValue; });
TA贡献1796条经验 获得超4个赞
我不知道确切的问题是什么,但您可以尝试此解决方案。在将字符串反序列化为对象之后,尝试将数据作为刺痛传递到操作中。
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");
}
});
在控制器端,您可以将此字符串反序列化以进行建模。
[HttpPost]
public async Task<IActionResult> TestPost(string data)
{
TestViewModel model=DeserializeObject<TestViewModel>(data);
return Json(new { success = true });
}
TA贡献1831条经验 获得超10个赞
我们需要设置值计数限制和长度。
请在 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贡献1871条经验 获得超8个赞
这里有两个解决方案:
首先demo,使用json类型的数据,ajax中我们通常使用这种方式传递array(传递json类型的数据,需要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>
}
第二个演示,使用 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贡献1817条经验 获得超14个赞
经过更多搜索后,我发现这是 ASP.NET Core 中的配置问题。默认情况下,复杂模型中可以绑定的最大值数为 1024。在 Startup 类的 ConfigureServices 方法中添加以下选项将允许您将此限制增加到您需要的任何值 。
services.AddMvc(options =>{ options.MaxModelBindingCollectionSize = 100000; })
另外,我发现人们在面对这个问题时可能会发现有用的其他东西,但是使用表单提交操作,是下面的选项,它采用与上面提到的相同的方法(source)。
services.Configure<FormOptions>(options => options.ValueCountLimit = 100000);
添加回答
举报