In this tutorial I'm going to illustrate how we can pass complex javascript objects to MVC controller.
I have two Model objects called Project and Employee as below.
public class Project { public long ProjectID { get; set; } public string ProjectName { get; set; } } public class Employee { public string Code { get; set; } public string Name { get; set; } }
And I have view-model called "ProjectViewModel" which contains above models as below.
public class ProjectViewModel { public Project Project { get; set; } public IList<Employee> EmployeeList { get; set; } }
Now I'm going to pass instance of ProjectViewModel and an Employee object to my MVC controller. Here is the controller method.
[HttpPost] public ActionResult Create(ProjectViewModel projectViewModel, Employee anotherEmployee) { return Content("done"); }
This is the JavaScript code that we can use to call the controller method.
var projectViewModel = {}; var project = {}; project.ProjectID = 1234; project.ProjectName = "Test Project"; projectViewModel.Project = project; var employeeList = []; var employee1 = {}; employee1.Code = "1111"; employee1.Name = "Saranga"; var employee2 = {}; employee2.Code = "2222"; employee2.Name = "Rathnayaka"; employeeList.push(employee1); employeeList.push(employee2); projectViewModel.EmployeeList = employeeList; var employee3 = {}; employee3.Code = "3333"; employee3.Name = "Test User"; $.ajax( { url: 'Project/Create', data: JSON.stringify({projectViewModel : projectViewModel, anotherEmployee : employee3}), contentType: 'application/json', dataType: 'json', type: 'POST', success: function (data) { alert("success"); }, error: function () { alert('error'); } });