Ich verwende die Grid-Komponente von Kendo UI in meiner Web-API-Anwendung. Meine Datensätze werden korrekt geladen und sogar das Löschen funktioniert, aber leider funktionieren die Post und Update nicht. Ich habe die Fehlermeldung auf die Antwort der Anfrage: Nachricht: "Ein Fehler ist aufgetreten.", ExceptionMessage: "Wert kann nicht null sein. ↵Parametername: entity", ...}ASP Web API Der Kendo UI-Grid-Wert darf nicht null sein: entity
Balg Teil meiner Ansicht und Controller . Was vermisse ich? Versuche viele Dinge. * Die Feldnamen sind Kleinbuchstaben, weil ich CamelCase verwende.
$(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"
});
Und das ist ein Teil meiner Controller und Repository:
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();
}
UPDATE denke ich parameterMap Funktion in erster Linie nicht in Ordnung war, weil, wenn die Veröffentlichung oder Aktualisierung es nie in dem Zustand eintritt , also hier wird die ParameterMap aktualisiert. Der POST funktionierte nach dieser Änderung (es schließt nicht nur das Fenster und repopuliert das Gitter, ich weiß nicht warum). Aber leider das Update funktioniert immer noch nicht, wie ich den folgenden Fehler innerhalb des Controllers erhalten "Anfügen einer Entität des Typs 'Models.Product' fehlgeschlagen, da eine andere Entität des gleichen Typs bereits den gleichen Primärschlüsselwert hat.". Was vermisse ich in dieser Situation?
parameterMap: function (options) {
return kendo.stringify(options);
},
type: "json"
sehe ich nicht *** Update *** und *** zerstören *** in *** Verkehr ***. Außerdem sehe ich *** HttpPut *** und *** HttpDelete *** in Web API Controller nicht. Fehle ich etwas? – Win
Tut mir leid, ich habe nur die create und httppost, aber ich habe sie in meinem Code. Ich dachte create und httppost war genug. Bei Bedarf bearbeite ich meine Frage mit dem Rest des Codes. – jtron
Sie sagten *** Update *** funktioniert nicht, aber Sie zeigen uns *** Create *** Code. Bitte umformulieren Sie die Frage und aktualisieren Sie sie mit dem entsprechenden Code. – Win