Monday, May 20, 2024
Homepage · c#
 Popular · Latest · Hot · Upcoming
96
rated 0 times [  98] [ 2]  / answers: 1 / hits: 17145  / 7 Years ago, thu, march 2, 2017, 12:00:00

I'm trying to call my controller via ajax passing some complex data.



My controller's action method.



public ActionResult CalculatePremium(QuoteDetailsViewModel quoteDetails)
{
ViewBag.Message = Your application description page.;

return View();
}


Javascript code:



quoteDetails = {
StartDate: '10-10-2016',
Drivers: [{ Name: 'Test', Occupation: 'Test2',
DateOfBirth: '10-10-1985'}, { Name: 'Test2', Occupation: 'Test4',
DateOfBirth: '10-10-1945' }],
Claims: ['5-5-2010']
};


$.ajax({
type: GET,
url: '/Home/CalculatePremium',
contentType: application/json; charset=utf-8,
data: quoteDetails,
dataType: json,
success: function () { alert('Success'); },
error: function (xhr, status, error) { alert('Error:'); }
});


View model (don't worry about string being used for DateTime - it is just for testing)



public class QuoteDetailsViewModel
{
public string StartDate { get; set; }
public List<Driver> Drivers { get; set; }
public List<string> Claims { get; set; }
}

public class Driver
{
public string Name { get; set; }
public string Occupation { get; set; }
public string DateOfBirth { get; set; }
}


When I call action method the object is populated with the following:



{MotorInsuranceCalculator.Models.QuoteDetailsViewModel}
Claims: null
Drivers: Count = 2
StartDate: 10-10-2016

quoteDetails.Drivers
Count = 2
[0]: {MotorInsuranceCalculator.Models.Driver}
[1]: {MotorInsuranceCalculator.Models.Driver}

quoteDetails.Drivers[0]
{MotorInsuranceCalculator.Models.Driver}
DateOfBirth: null
Name: null
Occupation: null

quoteDetails.Drivers[1]
{MotorInsuranceCalculator.Models.Driver}
DateOfBirth: null
Name: null
Occupation: null


Any help to resolve this would be greatly appreciated.


More From » c#

 Answers
34

contentType is the type of data you're sending, so application/json; The default is application/x-www-form-urlencoded; charset=UTF-8.


If you use application/json, you have to use JSON.stringify() in order to send JSON object.


JSON.stringify() turns a javascript object to json text and stores it in a string.


$.ajax({
type: "POST",
url: '/Home/CalculatePremium',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(quoteDetails),
dataType: "json",
success: function () { alert('Success'); },
error: function (xhr, status, error) { alert('Error:'); }
});

Also, you have to use HttpPost verb in order to execute a post request.


[HttpPost]
public ActionResult CalculatePremium(QuoteDetailsViewModel quoteDetails)
{
ViewBag.Message = "Your application description page.";
return View();
}

[#58707] Tuesday, February 28, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
sidneyh

Total Points: 118
Total Questions: 108
Total Answers: 105

Location: Mali
Member since Fri, Jun 18, 2021
3 Years ago
sidneyh questions
Tue, Jun 7, 22, 00:00, 2 Years ago
Wed, Apr 13, 22, 00:00, 2 Years ago
Wed, Aug 12, 20, 00:00, 4 Years ago
Wed, Jun 3, 20, 00:00, 4 Years ago
Fri, Apr 24, 20, 00:00, 4 Years ago
;