• 0

Sending an array via AJAX to MVC Controller


Question

First, let me start by saying that, though I'm a seasoned developer with 30 years behind the keyboard, I've only been working with web development for about a year, so there are things I don't know.  However, this one really has me confused!

 

All I want to do is send an array of integers to an MVC controller using an AJAX call.  The code below works absolutely perfectly for me every single time I run it in my development environment (Windows 10, VS2017), BUT, when I roll it out to the production server (running IIS 7.5), I get an error 500, internal server error.  To make matters worse, this code WORKED on the production environment 1 week ago, and yesterday it decided "screw you!" and started to fail.

 

Note, when it errors, it jumps into the error part of the Ajax call; it never gets into the controller method, I guess because it doesn't like the int[] parameter anymore...

 

Here is my AJAX call:

	var selectedItems = new Array();
	$("input:checkbox[name=selectPrice]:checked").each(function () {
		selectedItems.push(this.id);
	});

	if (selectedItems.length > 0) {
		$.ajax({
			url: "/ProductPrice/CanApprove",
			type: "post",
			dataType: "json",
			contextType: "application/json",
			data: { selectedIds: selectedItems },
			traditional: true,
			success: function (result) {
				if (result.success) {
					//Do something useful
				} else {
					//It all went wrong
				}
			},
			error: function (_err) {
				//It all went REALLY wrong
			}
		});
	}

 

And here is my controller method:

[Authorize]
[HttpPost]
public JsonResult CanApprove(int[] selectedIds)
{
	bool canApprove = service.CanApprove(selectedIds, out string reason, out int[] approvableIDs);
	return Json(new { success = canApprove, ex = reason, approvableIDList = approvableIDs }, JsonRequestBehavior.AllowGet);
}

 

I've had to change over to just passing a delimited string for now, and converting it back into an array inside my controller method (which is just urgh!), but I'm REALLY struggling to understand why this just stopped working?!  Is there anyone here with more javascript experience than me that can explain what could have caused this?

 

 

6 answers to this question

Recommended Posts

  • 0

Your ajax code is not sending an int[] array but an object with an int[] array:

 

What you expect it to send:

[1,2,3,4]

 

What it actually sends:

{"selectedIds": [1,2,3,4]}

 

Change data property in your ajax call to:

data: selectedItems,

 

That should probably work if my assumptions were correct :p

 

It's been a while since I worked with MVC controllers but as far I remember you don't need to send the controller parameter key in the object data if there is a single parameter in the controller method.

  • 0

Yeah, I tried that, and other variants. Without the name of the parameter, all the controller receives is NULL. :(

 

Anyway... I forgot to post, I actually found a solution to the problem late yesterday afternoon, after much pulling out of hair, and commenced to kicking myself repeatedly once I'd found it!

 

I was on the verge of just giving up completely when I decided that, even though the controller code was simple, I'd stick it inside a try/catch (which I should have done from the start anyway, because y'know, DUH!).  And when I did that, I was finally able to get a sensible error message in the AJAX call.  It seems that for some reason, my call was having trouble opening a database connection as the error complained that the connection as in use!

 

Ah ha! says I. I've seen that before and immediately went to look at the webconfig file, followed immediately by going over to our DBA and punching him in the side of the head.  It seems that when he last updated the webconfig when they changed the password a few days ago, he REMOVED the command "MultipleActiveResultSets=True" from the connection string.

 

IDIOT! IDIOT! IDIOT!

 

I'm amazed the app was functioning at ALL with that missing!

 

Moral of this story folks... IT'S THE DBA'S FAULT! :p

 

 

  • Haha 1
  • 0
  On 28/09/2017 at 17:17, Sledge said:

I think moral of the story is poor error handling.

 

Expand  

 

  On 23/09/2017 at 10:38, FloatingFatMan said:

 

Moral of this story folks... IT'S THE DBA'S FAULT! :p

 

Expand  

Seems the DBA is here and throwing the blame back at you :rofl:

 

But I have to agree with the DBA on this one, too many times I programmed a try catch without outputting the error in the catch resulting in missing the error and wondering what i did wrong :pinch:

  • 0
  On 28/09/2017 at 19:25, Seahorsepip said:

 

Seems the DBA is here and throwing the blame back at you :rofl:

 

But I have to agree with the DBA on this one, too many times I programmed a try catch without outputting the error in the catch resulting in missing the error and wondering what i did wrong :pinch:

Expand  

Hehe - nah just too many years covering my ass

  • 0
  On 28/09/2017 at 17:17, Sledge said:

I think moral of the story is poor error handling.

 

Should always be the first thing to code so when things do go wrong (which they always do) you can check a log and point a finger.

 

 

Expand  

Yeah, yeah, I know.. Like I said.  Idiot!! :p 

 

I'm still blaming the DBA though, as he did the connection string for the production server! :p 

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Yeah!!!! I was damn well shocked to see the tab with previous file open when I clicked on the new file. It had private info and I was opening another file to show another person. That was weird
    • The article says the whole setup is about the size of a pencil case which sounds pretty portable to me.
    • I thought router has to have 6 Ghz band to be called wifi-7, guess I was wrong...
    • I have the Pixel 9 Pro XL...Unless this thing is "leaps and bounds" faster than the 9, I'll pass. And by leaps and bounds, I don't mean on benchmarks. "Real world" faster. Most people don't even come close to topping out the performance of their phones. Tensor G5 is Google's most powerful chip to date, boasting a staggering 36 percent performance leap over G4.
    • MIT's stunning 'bubble wrap' device squeezes water out from thin air even in deserts by Sayan Sen Image by Matteo Roman via Pexels Massachusetts Institute of Technology (MIT) engineers have built a new kind of device that can pull clean drinking water straight out of the air—no electricity needed. It’s designed for areas where water is scarce and traditional sources like rivers or lakes aren’t reliable. Right now, more than 2.2 billion people globally don’t have access to safe drinking water. In the United States alone, 46 million face water insecurity, with either no running water or water that’s not safe to drink. This new device, called an Atmospheric Water Harvesting Window (AWHW), uses a unique hydrogel panel that looks like black bubble wrap. These dome-shaped bubbles soak up water vapor from the air, especially at night when humidity is higher. During the day, sunlight makes the vapor inside evaporate. That vapor then condenses on a glass surface and drips down through a tube, turning into drinkable water. The AWHW doesn’t rely on power sources like batteries or solar panels. It’s completely passive, meaning it works on its own. The team tested a meter-sized panel in Death Valley, California, one of the driest places in North America, and got between 57.0 and 161.5 milliliters of water per day even with humidity as low as 21 percent. That’s more than what other similar passive devices have managed. “We have built a meter-scale device that we hope to deploy in resource-limited regions, where even a solar cell is not very accessible,” said Xuanhe Zhao, a professor at MIT. “It’s a test of feasibility in scaling up this water harvesting technology. Now people can build it even larger, or make it into parallel panels, to supply drinking water to people and achieve real impact.” Another cool part of the design is how they kept the water safe to drink. Usually, these kinds of hydrogels use salts like lithium chloride to absorb more vapor but that can lead to salt leaking into the water, which isn’t ideal. To solve this, MIT’s team mixed in glycerol, a compound that helps keep salt locked inside the gel. In testing, the lithium ion concentration in the harvested water stayed below 0.06 ppm (parts per million), which is way below the safe limit. The hydrogel domes also give the material more surface area, letting it collect more vapor. The outer glass panel is coated with a special polymer film that helps cool the glass, making it easier for vapor to condense. “This is just a proof-of-concept design, and there are a lot of things we can optimize,” said lead author Chang Liu, now a professor at the National University of Singapore. “For instance, we could have a multipanel design. And we’re working on a next generation of the material to further improve its intrinsic properties.” Published in Nature Water, the study says the AWHW could last at least a year and shows promise for making safe, sustainable water in places with harsh climates. The researchers believe an array of vertical panels could one day supply water to individual households, especially in remote or off-grid locations. Source: MIT News, Nature This article was generated with some help from AI and reviewed by an editor. Under Section 107 of the Copyright Act 1976, this material is used for the purpose of news reporting. Fair use is a use permitted by copyright statute that might otherwise be infringing.
  • Recent Achievements

    • One Month Later
      Ricky Chan earned a badge
      One Month Later
    • First Post
      leoniDAM earned a badge
      First Post
    • Reacting Well
      Ian_ earned a badge
      Reacting Well
    • One Month Later
      Ian_ earned a badge
      One Month Later
    • Dedicated
      MacDaddyAz earned a badge
      Dedicated
  • Popular Contributors

    1. 1
      +primortal
      505
    2. 2
      ATLien_0
      209
    3. 3
      Michael Scrip
      202
    4. 4
      Xenon
      143
    5. 5
      +FloatingFatMan
      121
  • Tell a friend

    Love Neowin? Tell a friend!