asp.net-mvc – ASP.NET MVC 3 – 将复杂的JSON模型发布到操作
|
我试图将以下 JSON数据发布到我的控制器上的Action方法… {"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}]}
在这种情况下,重要的部分是“手机”财产. 这是ajax电话正在发布… $.ajax({
url: '/Trainer/SaveProfile',type: 'POST',dataType: 'json',success: function (data) {
//...
},error: function (jqXHR,textStatus,errorThrown) {
//...
},data: profileData
});
profileData是我上面发布的JSON. 这是我使用AJAX帖子调用的Action的方法签名… [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; }
}
这里是通用列表中使用的Phone对象… 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方法,除Phones之外的所有属性正确映射. List对象甚至使用正确数量的Phone对象填充,但它们都在null或0或false的所有字段上都有默认值.所以我不知道我做错了什么,但是当我尝试从一个JSON数组中填充一个模型列表时,我得到一个正确数量的空白对象的列表. 任何想法我在这里做错什么? 解决方法尝试设置正确的内容类型,并确保您正在发送一个真正的JSON请求(使用JSON.stringify方法):var profileData = {"Id":"0","IsPrimary":false}]}
$.ajax({
url: '/Trainer/SaveProfile',contentType: 'application/json',data: JSON.stringify({ model: profileData }),errorThrown) {
//...
}
});
JSON.stringify本来是内置于现代浏览器中的,但如果您需要支持旧版浏览器,则可以将json2.js脚本包含在您的页面中. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 实体框架 – WebApi OData:$filter’any’或’all’查询不
- asp.net-mvc – 在同一个视图文件夹中的RenderPartial控件
- asp.net-mvc – ASP.NET MVC验证的唯一性
- asp.net-mvc-2 – 使用’class(或其他保留关键字)作为匿名类
- asp.net – 如何在MVC 3中设置图表系列颜色?
- 自定义数据注释ASP.NET MVC C#
- ASP.Net将文件下载到客户端浏览器
- ASP.NET身份两个因素不起作用 – Cookie问题?
- asp.net – 以编程方式将Textbox TemplateField列添加到Gri
- 具有确认电子邮件的ASP.NET会员提供商
- asp.net-mvc-3 – 如何在mvc3 razor视图中使用会
- ASP.NET LinkButton / ImageButton和JQuery验证?
- asp.net-mvc – 缺少Visual Studio 2012 MVC本地
- Asp.net mvc3剃刀具有多个提交按钮
- asp.net-mvc – ASP.NET MVC 5模型绑定编辑视图
- 实体框架 – 实体框架核心更新许多对许多
- asp.net – 检测是否加载了HttpModule
- asp.net – 如何使usercontrol可用于多个项目?
- asp.net-mvc-3 – 使用Ninject获取对象的实例
- asp.net-mvc-routing – ASP MVC 5属性路由VS.基
