MVC3使用JQuery Ajax将ViewModel传递给控制器​​方法

我正在尝试使用JQuery Ajax将表单的数据传递给我的控制器方法,但是当我在Controller端使用调试器时,我不确定如何执行此操作,因为我的ViewModel为null。

我的ViewModel是:

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

前提是我的数据库中的实体/表。

表单包含Premises表中的字段。

在我的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'); } }) 

但是,当我检查my方法中的viewModel参数时,它为null:

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

关于如何映射这个以便正确绑定视图模型的任何想法。 谢谢

您的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} } 

如果要从表单的绑定视图模型自动构建模型,可以使用此答案https://stackoverflow.com/a/1186309中的代码正确序列化为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的属性名称不对应,因此无法正确绑定数据。