Angularjs资源将空对象发送到api控制器

时间:2014-03-24 18:02:21

标签: asp.net asp.net-mvc entity-framework angularjs asp.net-web-api

您好我在下面的agularjs资源工作正常。

return {
        formDis: $resource('/api/pDisc/:id', { id: '@id' }, { update: { method: 'POST' } })
    };

使用资源的angularjs cotroller是

$scope.submit = function (form) {
        console.log(form.dis.length);
        console.log(form.dis);
        for (var i = 0; i < form.dis.length; i++) {       
            pRepository.formDis.update(form.dis[i], function () {
                {
                    alert("Saved");
                }
            });      
       };
    };

WebConfig

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

接收它的MVC Api是

// POST api/projDisc
        public HttpResponseMessage Postproject_discussion(pDis pDis)
        {          
                db.project_discussion.Add(pDis);
                db.SaveChanges();          
        }

班级是

 [DataContract(IsReference = false)]
    [Serializable]
    public partial class pDis
    {
        public int pDis_id { get; set; }
        public int pro_id { get; set; }
        public string message {get; set;}

        public virtual pro pro { get; set; }
        public virtual people people { get; set; }
    }
}

当我运行它时,我的api中出现错误

db.project_discussion.Add(pDis); 

错误是

  An exception of type 'System.Data.Entity.Validation.DbEntityValidationException' occurred in EntityFramework.dll but was not handled in user code

我收到此错误,因为api正在接收空对象。 在角度控制器中,我可以看到控制台中的对象从表单中正确传递。 一旦将对象提交给资源并从该对象提交到api,就会出现错误,最终会将其作为空对象。请让我知道如何解决它。

1 个答案:

答案 0 :(得分:0)

根据您的评论:

  

我可以看到正确的数据是{“pro_id”:“221”,“message”:“sdsfsd”   pDis_id: “”}

我最好的猜测是模型绑定器无法转换为pDis类型。

我注意到的一件事是你的属性pDis_id是一个int(不可为空),你传递它pDis_id:""。我认为模型绑定器在这种情况下不知道该怎么做。

尝试为pDis_id提供一个整数值,或者根本不提供它。