28

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.

tereško
  • 58,060
  • 25
  • 98
  • 150
Radislav
  • 2,892
  • 7
  • 38
  • 61

2 Answers2

44
$.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.

enter image description here

Shyju
  • 214,206
  • 104
  • 411
  • 497
  • 1
    What if my model contains some viewModel as property? For example Person has property Profession with other properties? – Radislav May 29 '12 at 17:22
  • @Shyju: I have used your post as reference, but my model validations don't work with jQuery postback. They work fine with the input type=submit, but fail to fire with jQuery ajax postback. Any pointers will be helpful! – user869375 Jul 01 '15 at 09:26
  • How can i combine this with the change even of checkbox like $(document).on('change', '[type=checkbox]', function (data) { – Emil Feb 09 '17 at 12:01
9
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()
Kamyar
  • 18,639
  • 9
  • 97
  • 171