I am writing application with asp.net mvc. I have controller with action, which use some ViewModel as parameter. How to send form data with jquery post to that mvc controller.
The other way of passing the data from Controller to View can be by passing an object of the model class to the View. Erase the code of ViewData and pass the object of model class in return view. Import the binding object of model class at the top of Index View and access the properties by @Model.
$.post("Yourcontroller/YourAction", { FirstName : $("#txtFirstName").val(), LastName : $("#txtLastName") } ,function(data){ //do whatever with the response });
Your ViewModel Property names and Parameter we are passing should be same. Ie : Your view model should have 2 properties called FirstName
and LastName
like his
public class PersonViewModel { public string FirstName { set;get;} public string LastName { set;get;} // other properties }
And your Post action method should accept a parameter of type PersonViewModel
[HttpPost] public ActionResult YourAction(PersonViewModel model) { //Now check model.FirstName }
Alternatively, If your view is strongly typed to the PersonViewModel, you can simply send the serialized form to the action method using jQuery serialize
method
$.post("Yourcontroller/YourAction", $("#formId").serialize() ,function(data){ //do whatever with the response });
EDIT : As per the comment
Serialize
will take care of the Child property as well. Assume you have a class called Profession like this
public class Profession { public string ProfessionName { set; get; } }
And your PersonViewModel has a property of type Profession
public class PersonViewModel { //other properties public Profession Profession { set; get; } public PersonViewModel() { if (Profession == null) Profession = new Profession(); } }
You will get these data in your HttpPost Action method, if you fill that from your view.
var myData = { Parameter1: $("#someElementId").val(), Parameter2: $("#anotherElementId").val(), ListParameter: { /* Define IEnumerable collections as json array as well */} // more params here } $.ajax({ url: 'someUrl', type: 'POST', dataType: "json", contentType: 'application/json', data: JSON.stringify(myData) }); [HttpPost] public JsonResult Create(CustomViewModel vm) { // You can access your ViewModel like a non-ajax call here. var passedValue = vm.Parameter1; }
You can also serialize the whole form and pass it to your controller's action method. In you ajax call:
data: $('form').serialize()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With