从视图发送到web api控制器

时间:2015-11-10 06:02:31

标签: javascript jquery json angularjs model-view-controller

当我从我的视图向web api控制器发送数据时,我的ID字段在控制器中始终为空,下面是我的代码

$scope.Create_Click = function (CategoryselectedItemvalue, SupplierSelectedItemvalue, Product_Name, Quantity_PerUnit, Reorder_Level, Unit_Price, Units_InStock, Units_OnOrder) {
            var CategoryID = parseInt(CategoryselectedItemvalue); 
            var SupplierID = parseInt(SupplierSelectedItemvalue); 
            var ProductName;
            var QuantityPerUnit;
            var ReorderLevel;
            var UnitPrice;
            var UnitsInStock;
            var UnitsOnOrder;
            Product = {
                CategoryID: CategoryID,
                SupplierID: SupplierID,
                ProductName: Product_Name,
                QuantityPerUnit: Quantity_PerUnit,
                ReorderLevel: Reorder_Level,
                UnitPrice: Unit_Price,
                UnitsInStock: Units_InStock,
                UnitsOnOrder: Units_OnOrder
            };
            $http({
                method: 'POST',
                url: '/api/Products/PostProduct',
                data: JSON.stringify($scope.Product),
                headers: { 'Content-Type': 'application/JSON' }
            }).
            success(function (data) {
                alert("Record Added");
            }).
            error(function (msg) {
                alert(msg);
            });
        };

    });

以下是我的控制器方法(此时我收到数据CategoryID且SupplierID始终为空)

[ActionName("PostProduct")]
        public IHttpActionResult PostProduct(Product product)
        {
            Product pro = new Product();
            pro.CategoryID = product.CategoryID;
            pro.SupplierID = product.SupplierID;
            pro.ProductName = product.ProductName;
            pro.QuantityPerUnit = product.QuantityPerUnit;
            pro.ReorderLevel = product.ReorderLevel;
            pro.UnitPrice = product.UnitPrice;
            pro.UnitsInStock = product.UnitsInStock;
            pro.UnitsOnOrder = product.UnitsOnOrder;
            if (repo.AddNewProduct(pro))
            {
                return Ok("Product Added");
            }
            else
            {
                return Ok("Error");
            }
        }

2 个答案:

答案 0 :(得分:2)

在对数据进行字符串化时,它应该采用JSON格式,其密钥为product(操作参数名称)

data: JSON.stringify({product : $scope.Product}),

如果您使用Web.API,则无需对数据进行字符串化,只需在执行[FromBody]参数之前使用Product属性。

[ActionName("PostProduct")]
public IHttpActionResult PostProduct([FromBody] Product product)
{
   //code is the same
}

答案 1 :(得分:2)

由于您的标题是'application / json',我认为不需要使用JSON.stringify基本上将json转换为字符串,因此您无法访问密钥。

只需以JSON格式发送您的对象。