Я пишу приложение с asp.net mvc. У меня есть контроллер с действием, в котором используется некоторый параметр ViewModel. Как отправить данные формы с jquery-сообщением на этот контроллер mvc.
Как отправить данные в jquery.post на mvc-контроллер, который использует ViewModel в качестве параметра?
Ответ 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, если вы заполните его с вашего вида.
Ответ 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()