Asp.net ASP Web API Kendo UI网格值不能为空:实体
我正在Web API应用程序上使用来自KendoUI的网格组件。我的记录正在正确加载,甚至删除也在工作,但不幸的是,Post和Update不起作用。我在请求的响应上得到了错误消息:消息:“发生了错误”。异常消息:“值不能为null。↵参数名称:实体“,…} 下面是我的视图和控制器的一部分。我错过了什么?尝试很多东西*字段名是小写的,因为我使用的是CamelCaseAsp.net ASP Web API Kendo UI网格值不能为空:实体,asp.net,asp.net-web-api,kendo-ui,kendo-grid,Asp.net,Asp.net Web Api,Kendo Ui,Kendo Grid,我正在Web API应用程序上使用来自KendoUI的网格组件。我的记录正在正确加载,甚至删除也在工作,但不幸的是,Post和Update不起作用。我在请求的响应上得到了错误消息:消息:“发生了错误”。异常消息:“值不能为null。↵参数名称:实体“,…} 下面是我的视图和控制器的一部分。我错过了什么?尝试很多东西*字段名是小写的,因为我使用的是CamelCase $(document).ready(function () { var dataSource = new kendo.dat
$(document).ready(function () {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
url: "/api/products",
dataType: "json"
},
update: {
url: function (data) {
return "/api/products/" + data.id;
},
dataType: "json",
type: "PUT"
},
destroy: {
url: function (data) {
return "/api/products/" + data.id;
},
dataType: "json",
type: "DELETE"
},
create: {
url: "/api/products",
dataType: "json",
type: "POST"
},
parameterMap: function (options, operation) {
if (operation !== "read" && options.models) {
return { models: kendo.stringify(options.models) };
}
}
},
batch: false,
pageSize: 20,
schema: {
model: {
id: "id",
fields: {
id: { editable: false, nullable: true },
name: { validation: { required: true } },
description: { validation: { required: true } }
}
}
}
});
$("#grid").kendoGrid({
dataSource: dataSource,
pageable: true,
height: 550,
toolbar: ["create"],
columns: [
{ field: "name", title: "Name" },
{ field: "description", title: "Description" },
{ command: ["edit", "destroy"], title: " ", width: "250px"
}],
editable: "popup"
});
这是我的控制器和存储库的一部分:
public IHttpActionResult GetProducts()
{
var products = _productRepository.GetProducts();
return Ok(products);
}
[HttpPost]
public IHttpActionResult CreateProduct(Product product)
{
_productRepository.CreateProduct(product);
_productRepository.SaveProduct();
return Ok();
}
[HttpPut]
public IHttpActionResult UpdateProduct(int id, Product product)
{
var productInDb = _productRepository.GetProduct(id);
if (productInDb == null)
return NotFound();
_productRepository.UpdateProduct(product);
_productRepository.SaveProduct();
return Ok();
}
public Product GetProduct(int id)
{
return _context.Products.SingleOrDefault(p => p.Id == id);
}
public void CreateProduct(Product product)
{
_context.Products.Add(product);
}
public void UpdateProduct(Product product)
{
_context.Entry(product).State = EntityState.Modified;
}
public void SaveProduct()
{
_context.SaveChanges();
}
更新
我认为parameterMap函数一开始是错误的,因为在发布或更新时,它从未在条件中输入,所以这里是parameterMap更新。这篇文章在那次改变后起了作用(我不知道为什么,它不仅仅是关闭窗口和重新填充网格)但不幸的是当我在控制器内收到以下错误时,更新仍然不起作用:“附加类型为'Models.Product'的实体失败,因为相同类型的另一个实体已具有相同的主键值。”。在这种情况下,我遗漏了什么
parameterMap: function (options) {
return kendo.stringify(options);
},
type: "json"
我在注释中的帮助下设法解决了这个问题(基本上,主要问题是parameterMap,然后需要填充tweeks以及在控制器方法的返回中传回实体)。我将更新后的代码放在下面(仅更改的部分) 视图: 控制器:
public IHttpActionResult GetProducts()
{
var products = _productRepository.GetProducts();
return Ok(products);
}
[HttpPost]
public IHttpActionResult CreateProduct(Product product)
{
_productRepository.CreateProduct(product);
_productRepository.SaveProduct();
return Ok(product);
}
[HttpPut]
public IHttpActionResult UpdateProduct(int id, Product product)
{
_productRepository.UpdateProduct(product);
_productRepository.SaveProduct();
return Ok(product);
}
我没有看到在传输中更新和销毁。此外,我在WebAPI控制器中没有看到HttpPut和HttpDelete。我遗漏了什么吗?对不起,我只是把create和httppost放在我的代码中了。我认为create和httppost就足够了。如果需要,我会用剩下的代码编辑我的问题。你说更新不起作用,但你告诉我们创建代码。请重新编写问题并使用适当的代码进行更新。创建和更新不起作用,所以你是对的,我用其他方法更新了我的问题。似乎exceptionMessage是从实体框架中抛出的-将null插入到不允许null值的列中。
public IHttpActionResult GetProducts()
{
var products = _productRepository.GetProducts();
return Ok(products);
}
[HttpPost]
public IHttpActionResult CreateProduct(Product product)
{
_productRepository.CreateProduct(product);
_productRepository.SaveProduct();
return Ok(product);
}
[HttpPut]
public IHttpActionResult UpdateProduct(int id, Product product)
{
_productRepository.UpdateProduct(product);
_productRepository.SaveProduct();
return Ok(product);
}