从ajax调用web api方法发布值为什么变为null?

时间:2018-02-27 10:10:35

标签: asp.net-mvc-4 asp.net-web-api asp.net-ajax asp.net-mvc-views

当我调试它显示空值时,我正在向Web API方法发布一些值。

下面是ajax调用的snipet代码,这里我传递的是dept_name但它在web API方法中显示为null。

var _customer = {};
            _customer.DepartmntName = txtName.val();
            _customer.DateCreated = null;
            _customer.DateModified = null;
            _customer.IsDeleted = null;
            _customer.ParentID = null;
            _customer.Icon = null;
            _customer.Paren = null;
            alert( _customer.DepartmntName);
            alert(_customer);
            $.ajax({
                type: "POST",
                url: "/api/AddDepSpc/InsertCustomer2",
                 data: JSON.stringify(_customer),
                contentType: "application/json",
                dataType: "json",
                success: function (r) {
                alert("success" + r);
               var row = $("#tblCustomers tr:last-child").clone(true);
                    //AppendRow(row, r.CustomerId, r.Name, r.Country);
      AppendRow(row,r.dept_name.r.date_created,r.date_modified,r.IsDeleted,
       r.ParentID.r.Icon,r.Paren);
                    txtName.val("");

                }
            });

以下网址api方法的代码段。

public class AddDepSpcController : ApiController
    {
        [Route("api/AddDepSpc/InsertCustomer2")]
        [HttpPost]
        public   master_department InsertCustomer2(master_department _customer)
        {           
            using (HRMEntities entities = new HRMEntities())
            {
                entities.master_department.Add(_customer);
                entities.SaveChanges();
                entities.SaveChanges();
            }
            return _customer;
        }      
    }

现在处于调试模式时,它显示为null我认为我已将HR作为部门名称传递,其余所有参数现在都为null。在web api方法中查看HR参数值。

Debug

1 个答案:

答案 0 :(得分:1)

您回发的对象包含的属性名称与您的模型不匹配。

您的模型包含名为dept_name的属性,但javascript对象包含一个名为DepartmntName的属性。同样,其他名称都不匹配(Icon除外)。假设您要将txtName的值绑定到模型dept_name属性,那么在脚本中,使用

var _customer = {};
_customer.dept_name = txtName.val(); // not DepartmntName
....

另请注意,没有理由将null值添加到_customer对象(控制器中默认为null)。您也可以删除contentType: "application/json",选项,只需在ajax调用中使用data: _customer,,而不是将其字符串化。