MVC3 Передача ViewModel в метод контроллера с использованием JQuery Ajax

Я пытаюсь передать данные формы в свой метод контроллера с помощью JQuery Ajax, но я не уверен, как вы это делаете, так как мой ViewModel имеет значение null, когда я использую отладчик на стороне контроллера.

My ViewModel:

public class PremisesViewModel
{
 public string createPremisesErrorMessage { get; set; }
 public string updatePremisesErrorMessage { get; set; }
 public SelectList listOfCounties = Initialise.countiesSelectList;
 public Premise premises { get; set; }
}

где помещение является сущностью/таблицей в моей базе данных.

Форма содержит поля в таблице Помещения.

В моей функции javascript я делаю это:

var premisesViewModel = {
 Id: 0,
 PremisesDescription: $('#premises_PremisesDescription').val(),
 OrdnanceSurveyReference: $('#premises_OrdnanceSurveyReference').val(),
 PartRestrictedNotes: $('#premises_PartRestrictedNotes').val(),
 NatureOfPremises: $('#premises_NatureOfPremises').val(),
 AddressLine1: $('#premises_AddressLine1').val(),
 AddressLine2: $('#premises_AddressLine2').val(),
 Town: $('#premises_Town').val(),
 CountyId: $('#premises_CountyId').val(),
 Postcode: $('#premises_Postcode').val()
 }
 alert(form.serialize);
 $.ajax({
 url: form.attr('action'),
 type: 'POST',
 dataType: "json",
 contentType: 'application/json',
 data: JSON.stringify(premisesViewModel),
 success: function (data) {
 alert('done');
 }
 })

Однако, когда я проверяю параметр viewModel в моем методе, он равен null:

[HttpPost]
 public JsonResult Create(PremisesViewModel pvm)
 {
 return null;
 }

Любые идеи о том, как сопоставить это так, чтобы viewmodel была правильно привязана. Благодаря

3 ответа

Ваш формат JSON точно такой же, как ваш класс модели.

Текущий пример

public class PremisesViewModel
{
 public string createPremisesErrorMessage { get; set; }
 public string updatePremisesErrorMessage { get; set; }
 public SelectList listOfCounties = Initialise.countiesSelectList;
 public Premise premises { get; set; }
}

Ваш JSON как

var premisesViewModel = {
 createPremisesErrorMessage : $('#premises_PremisesDescription').val(),
 updatePremisesErrorMessage: $('#premises_OrdnanceSurveyReference').val(), 
 premises : {Define more properties here as per your Premise structure}
 }


Если вы хотите автоматически построить модель из модели связанных видов формы, вы можете использовать код из этого ответа qaru.site/questions/847/..., чтобы правильно сериализовать Объект JSON.

Затем вам нужно передать его в виде строки в ваш вызов $.ajax. В общем, очень похоже на то, что вы изначально имели. Что-то вроде:

var premisesViewModel = $('form').serializeObject();
$.ajax({
 url: form.attr('action'),
 type: 'POST',
 dataType: "json",
 contentType: 'application/json',
 data: JSON.stringify(premisesViewModel),
 success: function (data) {
 alert('done');
 }
 });

Довольно странно, что нет никакой основной функции для преобразования в объект JSON, но там вы идете.


Имена переменных в данных, которые вы публикуете, не соответствуют именам свойств вашего ASP.Net MVC ViewModel, поэтому данные не могут быть привязаны должным образом.

licensed under cc by-sa 3.0 with attribution.