C# 复杂对象未绑定到JSON数据
我有两个ViewModel对象TalentViewModel和EditTalentViewModel。以下是它们各自的代码: TalentViewModelC# 复杂对象未绑定到JSON数据,c#,angularjs,json,asp.net-mvc,angularjs-http,C#,Angularjs,Json,Asp.net Mvc,Angularjs Http,我有两个ViewModel对象TalentViewModel和EditTalentViewModel。以下是它们各自的代码: TalentViewModel public class TalentViewModel { [JsonProperty(PropertyName = "TalentId")] public long TalentId { get; set; } [JsonProperty(PropertyName = "TalentName")] pub
public class TalentViewModel
{
[JsonProperty(PropertyName = "TalentId")]
public long TalentId { get; set; }
[JsonProperty(PropertyName = "TalentName")]
public string TalentName { get; set; }
}
public class EditTalentViewModel
{
[JsonProperty(PropertyName = "AddedTalents")]
public List<TalentViewModel> AddedTalents { get; set; }
[JsonProperty(PropertyName = "RemovedTalents")]
public List<TalentViewModel> RemovedTalents { get; set; }
}
EditTalentViewModel
public class TalentViewModel
{
[JsonProperty(PropertyName = "TalentId")]
public long TalentId { get; set; }
[JsonProperty(PropertyName = "TalentName")]
public string TalentName { get; set; }
}
public class EditTalentViewModel
{
[JsonProperty(PropertyName = "AddedTalents")]
public List<TalentViewModel> AddedTalents { get; set; }
[JsonProperty(PropertyName = "RemovedTalents")]
public List<TalentViewModel> RemovedTalents { get; set; }
}
我使用了中建议的自定义模型绑定器,并将其用作EditTalentViewModel对象的模型绑定器。以下是操作方法的一部分:
[HttpPost]
public ActionResult AddTalents([ModelBinder(typeof(JsonModelBinder))]EditTalentViewModel talents)
{
if (!ModelState.IsValid) return Json("Fail");
var userId = User.Identity.GetUserId<long>();
if (talents.AddedTalents == null && talents.RemovedTalents == null)
{
return Json("Success");
}
//.........
}
但是,在调试代码时,EditViewModel类的AddedTalents和RemovedTalents属性为空。我错过了什么?我怎样才能解决这个问题?还有没有更好的方法进行模型绑定
是您希望作为请求主体发布到服务器的对象集合。因此,错误在于您使用{}
包装了人才
,这不是必需的,因为人才
已经是对象的集合
$http({
method:"POST",
url:"/Interest/AddTalents",
data: talents, //<--change here, removed unwanted {}
headers: {
'Content-type': "application/json"
},
responseType:"json"
})
$http({
方法:“张贴”,
url:“/Interest/addtallents”,
数据:talents,//如果talents
是集合,则不要用{}
包装talents
,而是直接传递数据数据:talents
注意,您使用的是传统的承诺语法成功错误,请使用然后方法,如本文所述()@PankajParkar,你说得对!这就是问题所在。添加你的评论作为答案,这样我就可以接受。如果天赋是一个简单的对象呢?我们还需要删除花括号吗?在发送ajax数据时何时使用花括号合适?@avidProgrammer请看,你必须以预期的格式将数据从客户端发送到服务器。就像这里一样服务器是接受人才的集合
,而您在客户端已经有了人才
,它正在工作。现在我来回答您的问题..是的..您应该将其作为一个数组,然后将其传递给服务器类似于[]的内容。concat(人才)
会起作用