Asp.net ASP Web API Kendo UI网格值不能为空:实体

Asp.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

我正在Web API应用程序上使用来自KendoUI的网格组件。我的记录正在正确加载,甚至删除也在工作,但不幸的是,PostUpdate不起作用。我在请求的响应上得到了错误消息:消息:“发生了错误”。异常消息:“值不能为null。↵参数名称:实体“,…}

下面是我的视图和控制器的一部分。我错过了什么?尝试很多东西*字段名是小写的,因为我使用的是CamelCase

$(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);
}