/ / ASP уеб приложния програмен интерфейс (API) - Kendo Grid и модел на държавата - asp.net, asp.net-web-api, kendo-ui, kendo-grid, kendo-asp.net-mvc

ASP Web API - Кендо Мрежа и модел на държавата - asp.net, asp.net-web-api, kendo-ui, кендо-грид, kendo-asp.net-mvc

Използвам Kendo Grid и ModelState.Изискване на условията в моя метод за публикация в API за уеб. Когато създам нов запис в решетката (всъщност аз използвам опцията за изскачане на мрежата, за да създам нов запис), то изпраща Id на моя клас като null, а когато става въпрос за моя контролер ModelState е винаги невалиден, защото очаква идентификационния номер на моя клас да бъде 0. Реших го чрез промяна на стойността на Id на параметъраMap на източника на данни, когато операцията е "създаване" (вижте кода по-долу), но аз наистина не знам дали това е най-доброто решение, тъй като ми се струва като лош начин. Има ли още една възможност за решаване на този проблем? Благодаря.

Изглед:

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

Контролер (аз поставих само пост метода, тъй като той е този, който има проблем):

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

Отговори:

1 за отговор № 1

Може би е така документ за самоличност полето е nullable: true.

Можете ли да го премахнете и да го добавите type: "number"?

fields: {
id: { editable: false, type: "number" },
name: { validation: { required: true } },
description: { validation: { required: true } }
}