Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 137
  • Last Modified:

sending data through JSON to MVC Controller Method

Hi All,

I've trying to send across some data to a MVC model.

The model is calling but the data is null? any ideas what I'm doing wrong here'

var fields = new Array();

                fields.push({
                    "amount": $('#amountSlider').val(),
                    "duration": $('#durationSlider').val(),
                    "security": $('#currentSecuritySlider').val(),
                    "loan": $('#existingLoansSlider').val(),
                    "securityType": $('#securityTypeDropDown').val(),
                    "charge": $('#chargeDropDown').val(),

                    //second page
                    "fullName": $('#fullNameTextBox').val(),
                    "email": $('#emailTextBox').val(),
                    "phone": $('#phoneTextBox').val()
                });

                console.log(fields);
                console.log(JSON.stringify(fields));

                $.ajax({
                    url: "/Home/SendForm",
                    contentType: "application/x-www-form-urlencoded",
                    type: "POST",
                    datatype: "json",
                    data: JSON.stringify(fields),
                    error: function (xmlHttpRequest, errorText, thrownError) {
                        alert(xmlHttpRequest + "|" + errorText + "|" + thrownError);
                    },
                    success: function (data) {
                        alert(data);
                    }
                });

Open in new window


and the method in my home controller

        public class InstantQuote
        {
            public string amount { get; set; }
            public string duration { get; set; }
            public string security { get; set; }
            public string loan { get; set; }
            public string securityType { get; set; }
            public string charge { get; set; }
            public string fullName { get; set; }
            public string email { get; set; }
            public string phone { get; set; }

        }

        [HttpPost]
        public Boolean SendForm(InstantQuote form) {
...
}

Open in new window


When I break into the c# method its showing form contains an object but all the items are set to null?
0
flynny
Asked:
flynny
  • 4
  • 3
1 Solution
 
käµfm³d 👽Commented:
What does your action's signature look like?
0
 
flynnyAuthor Commented:
Thanks fo rthe fast reply.

As above its just  [HttpPost]
0
 
käµfm³d 👽Commented:
Your Javascript is passing an array, but your action isn't expecting an array. Change your Javascript to create a new object, and that object will have property names that correspond to the InstantQuote class.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
flynnyAuthor Commented:
Thanks Kaufmed,

that worked.

so in order for MVC to convert the JSON to the model it needs to be explicitly sent as an object rather than a stringified array?

how does the ajax know this is the JSON.stringify not the same string?
0
 
käµfm³d 👽Commented:
No. You need to match the structure between your C# and your Javascript. You can assuredly send an array from Javascript to C#...if your C# expects an array. So you could have alternatively changed your C# to:

[HttpPost]
public Boolean SendForm(InstantQuote[] form) {

Open in new window


If you actually intend on sending an array, then you'd want the above instead. I didn't gather that you actually needed an array.
0
 
käµfm³d 👽Commented:
Also, IIRC, you shouldn't need to stringify the data in order to send it. Just send the JSON object in the data property of your AJAX call.
0
 
flynnyAuthor Commented:
Hi KAufmed,

no i dont need an array I was just wondering how it would be able to tell the difference as the JSON.stringify string of both objects would be the same. (mainly for understanding as you solution worked perfectly.

i just did a console output on both sets and I see now that stringifying the array encases it in []

thanks again kaufmed
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now