我想下面的JSON数据发布到我的控制器上的操作方法......ASP.NET MVC 3 - 在这种情况下,发布复杂的JSON模式来操作
{"Id":"0","VendorId":"5","FirstName":"g","LastName":"g","Sex":"m","DateOfBirth":"","Address":"","City":"","State":"","PostCode":"","Country":"","Email":"","AirportCity":"s","AirportState":"s","CurrencyCode":"1","UsTaxId":"","ForeignTaxId":"","GstNumber":"","TaxExemptCalifornia":false,"TaxExemptCanada":false,"DateContracted":"","DateTerminated":"","TerminationStatus":"","FirstSeminarDate":"","FirstOnsiteDate":"","LastSeminarDate":"","DateCertified":"","CertificationCall":"","CertificationMaterials":"","FacultyTrainer":"","PassportIssued":"","PassportExpired":"","TnVisa":false,"BrochurePermission":false,"Phones":[{"Id":0,"Type":"cell","Number":"222-333-4444","IsPrimary":false},{"Id":0,"Type":"home","Number":"333-444-5555","IsPrimary":false}]}
随着显著部分是正“电话”财产走向终点。 仅供参考:我通过在JavaScript控制台中调用JSON.stringify(profileData)获得了此处发布的这个JSON字符串。在profileData中是一个实际的对象。
这里是AJAX调用,它正在使帖子...
$.ajax({
url: '/Trainer/SaveProfile',
type: 'POST',
dataType: 'json',
success: function (data) {
//...
},
error: function (jqXHR, textStatus, errorThrown) {
//...
},
data: profileData
});
随着profileData是,我在上面张贴的JSON。
下面是我用AJAX调用后的操作方法签名......
[HttpPost]
public ActionResult SaveProfile(TrainerEditModel model)
这里是TrainerEditModel(抱歉它是如此之大)...
public class TrainerEditModel
{
public TrainerEditModel()
{
Phones = new List<Phone>();
}
[Display(Name = "Trainer Id")]
public Int32 Id { get; set; }
[Display(Name = "Vendor Id")]
[Required(ErrorMessage = "Vendor ID is required.")]
public Int32? VendorId { get; set; }
[Display(Name = "First Name")]
[Required(ErrorMessage = "First Name is required.")]
public String FirstName { get; set; }
[Display(Name = "Last Name")]
[Required(ErrorMessage = "Last Name is required.")]
public String LastName { get; set; }
public String Address { get; set; }
public String City { get; set; }
public String State { get; set; }
[Display(Name = "Postal Code")]
public String PostCode { get; set; }
public String Country { get; set; }
[DataType(DataType.EmailAddress, ErrorMessage = "Must be a valid email address.")]
public String Email { get; set; }
[Display(Name = "Airport City")]
[Required(ErrorMessage = "Airport City is required.")]
public String AirportCity { get; set; }
[Display(Name = "Airport State")]
[Required(ErrorMessage = "Airport State is required.")]
public String AirportState { get; set; }
[Display(Name = "Currency Code")]
[Required(ErrorMessage = "Currency Code is required.")]
public String CurrencyCode { get; set; }
[Display(Name = "US Tax Id")]
[RegularExpression(@"^\d{3}-\d{2}-\d{4}$|^\d{2}-\d{7}$", ErrorMessage = "US Tax Id must be a valid Social Security Number or Tax ID.")]
public String UsTaxId { get; set; }
[Display(Name = "Foreign Tax Id")]
public String ForeignTaxId { get; set; }
[Display(Name = "Tax Exempt California")]
public Boolean TaxExemptCalifornia { get; set; }
[Display(Name = "Tax Exempt Canada")]
public Boolean TaxExemptCanada { get; set; }
[Display(Name = "GST Number")]
public String GstNumber { get; set; }
[Display(Name = "Gender")]
[Required(ErrorMessage = "Gender is required.")]
public String Sex { get; set; }
[Display(Name = "Date of Birth")]
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
public DateTime? DateOfBirth { get; set; }
[Display(Name = "Date Contracted")]
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
public DateTime? DateContracted { get; set; }
[Display(Name = "Date Terminated")]
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
public DateTime? DateTerminated { get; set; }
[Display(Name = "Termination Status")]
public String TerminationStatus { get; set; }
[Display(Name = "First Seminar Date")]
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
public DateTime? FirstSeminarDate { get; set; }
[Display(Name = "First On Site Date")]
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
public DateTime? FirstOnsiteDate { get; set; }
[Display(Name = "Last Seminar Date")]
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
public DateTime? LastSeminarDate { get; set; }
[Display(Name = "Date Certified")]
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
public DateTime? DateCertified { get; set; }
[Display(Name = "Certification Call")]
public DateTime? CertificationCall { get; set; }
[Display(Name = "Certification Materials")]
public DateTime? CertificationMaterials { get; set; }
[Display(Name = "Faculty Trainer")]
public String FacultyTrainer { get; set; }
[Display(Name = "Passport Issued")]
public DateTime? PassportIssued { get; set; }
[Display(Name = "Passport Expired")]
public DateTime? PassportExpired { get; set; }
[Display(Name = "TN Visa")]
public Boolean TnVisa { get; set; }
[Display(Name = "Brochure Permission")]
public Boolean BrochurePermission { get; set; }
public List<Phone> Phones { get; set; }
}
这里是在通用列表中使用的电话对象...
public class Phone : IHaveAnId
{
public Int32 Id { get; set; }
public String Type { get; set; }
public String Number { get; set; }
public Boolean IsPrimary { get; set; }
public virtual Trainer Trainer { get; set; }
}
所以,这是问题所在。 HTTP Post正在成功到达Action方法,并且除电话之外的所有属性都正确映射。 List对象甚至填充了正确数量的Phone对象,但它们的所有字段都为null或0或false的默认值。所以我不知道我做错了什么,但是当我尝试从JSON数组填充模型中的列表时,我得到了正确数量的空白对象的列表。
任何想法我在做什么错在这里?
contentType:'application/json'修复了我的问题! – Scottie 2012-11-27 03:27:29
我的问题也是缺少的内容类型 – Gnomo 2013-01-10 19:43:04
这帮了我很多。我放弃了“传统:真正的”来模仿你的语法,并突然发挥作用。奇怪,但救济。 – 2013-05-31 18:29:51