Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复杂对象未绑定到JSON数据_C#_Angularjs_Json_Asp.net Mvc_Angularjs Http - Fatal编程技术网

C# 复杂对象未绑定到JSON数据

C# 复杂对象未绑定到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

我有两个ViewModel对象TalentViewModel和EditTalentViewModel。以下是它们各自的代码:

TalentViewModel

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类的AddedTalentsRemovedTalents属性为空。我错过了什么?我怎样才能解决这个问题?还有没有更好的方法进行模型绑定

是您希望作为请求主体发布到服务器的对象集合。因此,错误在于您使用
{}
包装了
人才
,这不是必需的,因为
人才
已经是对象的集合

$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(人才)
会起作用