Подтвердить что ты не робот

Как отправить данные в jquery.post на mvc-контроллер, который использует ViewModel в качестве параметра?

Я пишу приложение с asp.net mvc. У меня есть контроллер с действием, в котором используется некоторый параметр ViewModel. Как отправить данные формы с jquery-сообщением на этот контроллер mvc.

4b9b3361

Ответ 1

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

});

Имена свойств ViewModel и параметр, который мы передаем, должны быть одинаковыми. Т.е.: ваша модель представления должна иметь 2 свойства, называемые FirstName и LastName, как и его

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

}

И ваш метод действия Post должен принимать параметр типа PersonViewModel

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

В качестве альтернативы, если ваше представление строго типизировано для PersonViewModel, вы можете просто отправить сериализованную форму методу действий с помощью метода jQuery serialize

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

});

EDIT: согласно комментарию

serialize также позаботится о собственности Child. Предположим, у вас есть класс под названием Профессия, подобный этому

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

И ваш PersonViewModel имеет свойство типа Profession

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

Вы получите эти данные в свой метод HttpPost Action, если вы заполните его с вашего вида.

enter image description here

Ответ 2

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;
}

Вы также можете сериализовать всю форму и передать ее методу действия контроллера. В вас вызов ajax:

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