Вопрос по c#-4.0, asp.net-mvc, visual-studio-2010, jquery – Как отправить данные в jquery.post на контроллер mvc, который использует ViewModel в качестве параметра?

22

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

Ваш Ответ

2   ответа
8
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;
}

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

data: $('form').serialize()
Отлично !!! Я не знал, что это будет работать. Благодарю. Я проверю и сообщу вам. Radislav
38
$.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 : As per the comment

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

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

Exelent !!! Большое спасибо!!!! Radislav
@Radislav: Добро пожаловать :) Рад, что я мог помочь.
Что если моя модель содержит некоторое viewModel как свойство? Например Person имеет свойство Profession с другими свойствами? Radislav
@Radislav: Да, будет. Проверьте мой обновленный ответ.
@Shyju: я использовал ваш пост в качестве ссылки, но мои проверки моделей не работают с обратной передачей jQuery. Они отлично работают с input type = submit, но не запускаются с обратной передачей jQuery ajax. Любые указатели будут полезны!

Похожие вопросы