0
votes

I have the following JavaScript:

var ids = [
  "ed4bbe0e-d318-e811-a95f-000d3a11f5ee",
  "386c9468-d11b-e811-a95d-000d3a11ec14",
  "2913f317-991d-e811-a95d-000d3a11ec14"
];

$.ajax({
  method: 'POST',
  url: `/Jobs?handler=CreateJobsInQBO`,
  dataType: 'json',
  contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  // contentType: 'application/json',
  data: { jobIds: ids }
})

POSTing to the Razor Page handler below

public async Task<JsonResult> OnPostCreateJobsInQBO(IEnumerable<string> jobIds) {
   Result<List<Job>> result;
   if (jobIds == null || !jobIds.Any()) {
      result = "No jobs were submitted.";
   } else {
      result = await DoStuffAsync(jobIds);
   }

   return new JsonResult(result);
}

This works without issue. The problem is that when my JavaScript array is large, roughly 3000 items, I get null for the incoming handler parameter value. I've tried setting the ajax contentType to application/json and also using JSON.stringify on the object before it's sent, but they don't seem to make a difference. I also tried setting [FormBody] on the parameter in the handler function, but again, it didn't work.

I know I'm missing something simple here. I just need a way to POST an array of string to a handler method that has roughly around 5000 items. Preferably without using the application/x-www-form-urlencoded content type as I think that is what's causing the large array to not work.

1

1 Answers

2
votes

The default value of ValueCountLimit is 1024. It is a limit for the number of form entries to allow.

If the value count exceed 1024, you should increase it in Startup.cs

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