Comment envoyer des données dans jquery.post au contrôleur MVC qui utilise ViewModel en tant que paramètre?

J’écris une application avec asp.net mvc. J’ai contrôleur avec action, qui utilise certains ViewModel comme paramètre. Comment envoyer des données de formulaire avec jquery post à ce contrôleur MVC.

$.post("Yourcontroller/YourAction", { FirstName : $("#txtFirstName").val(), LastName : $("#txtLastName") } ,function(data){ //do whatever with the response }); 

Les noms de propriété ViewModel et le paramètre que nous transmettons doivent être identiques. C’est-à-dire que votre modèle de vue doit avoir 2 propriétés appelées FirstName et LastName comme son

 public class PersonViewModel { public ssortingng FirstName { set;get;} public ssortingng LastName { set;get;} // other properties } 

Et votre méthode d’action Post doit accepter un paramètre de type PersonViewModel

 [HttpPost] public ActionResult YourAction(PersonViewModel model) { //Now check model.FirstName } 

Sinon, si votre vue est fortement typée dans PersonViewModel, vous pouvez simplement envoyer le formulaire sérialisé à la méthode d’action à l’aide de la méthode jQuery serialize

 $.post("Yourcontroller/YourAction", $("#formId").serialize() ,function(data){ //do whatever with the response }); 

EDIT: Selon le commentaire

Serialize prendra également en charge la propriété Child. Supposons que vous ayez une classe appelée Profession comme celle-ci

 public class Profession { public ssortingng ProfessionName { set; get; } } 

Et votre PersonViewModel a une propriété de type Profession

 public class PersonViewModel { //other properties public Profession Profession { set; get; } public PersonViewModel() { if (Profession == null) Profession = new Profession(); } } 

Vous obtiendrez ces données dans votre méthode Action HttpPost, si vous les remplissez à partir de votre vue.

entrez la description de l'image ici

 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.ssortingngify(myData) }); [HttpPost] public JsonResult Create(CustomViewModel vm) { // You can access your ViewModel like a non-ajax call here. var passedValue = vm.Parameter1; } 

Vous pouvez également sérialiser le formulaire complet et le transmettre à la méthode d’action de votre contrôleur. En vous appelez ajax:

 data: $('form').serialize()