我在我的Web API post方法上使用了Kendo Grid和ModelState.IsValid条件。当我在网格上创建一个新记录时(事实上我正在使用网格的弹出选项创建一个新记录),它将我的类的Id发送为null,然后当它涉及我的控制器时,ModelState总是无效,因为它希望我的类的Id为0.我通过在操作为'create'时更改数据源的parameterMap上Id的值来解决它(参见下面的代码),但我真的不知道是否这是最好的解决方案,因为在我看来这是一种糟糕的方式。还有另一种方法可以解决这个问题吗?感谢。
查看:
$(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) {
// THIS IS MY FIX FOR NOW
if (operation === "create") {
options.id = 0;
}
return kendo.stringify(options);
},
type: "json"
},
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"
});
});
控制器(我只使用post方法,因为它是得到问题的那个):
[HttpPost]
public IHttpActionResult CreateProduct(Product product)
{
if (!ModelState.IsValid)
return BadRequest();
_productRepository.CreateProduct(product);
_productRepository.SaveProduct();
return Ok(product);
}
型号:
public class Product
{
public int Id { get; set; }
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
[StringLength(255)]
public string Description { get; set; }
}
存储库:
public void CreateProduct(Product product)
{
_context.Products.Add(product);
}
public void SaveProduct()
{
_context.SaveChanges();
}
答案 0 :(得分:1)
id 字段可能是nullable: true
。
您可以将其删除并添加type: "number"
吗?
fields: {
id: { editable: false, type: "number" },
name: { validation: { required: true } },
description: { validation: { required: true } }
}