Hello
I'm trying to use MVC Grid with OData source. Source is in my solution and based on EF a ODataController. And Grid reads data but not put new, modyfied, deleted data into server :(
Grid uses only one action in contorller: public IQueryable<Driver> GetDrivers(), why grid doesn't call others actions ?
Controler works with Postman, data was modyfiet after my own request.
Plis show me what I'm doing wrong.
My View
@model dynamic
@(Html.EJ().Grid<object>("DriversGrid")
.Datasource("http://localhost:26168/odata/Drivers")
.Columns(col =>
{
col.Field("Id").HeaderText("ID").IsIdentity(true).IsPrimaryKey(true).AllowFiltering(false).Add();
col.Field("Name").HeaderText("Nazwa").Add();
col.Field("DriverId").HeaderText("ID pastylki").Add();
})
.AllowFiltering()
.FilterSettings(d => d.FilterType(FilterType.Menu))
.AllowSorting()
.ClientSideEvents(events =>
{
events.EndAdd("onEndAdd");
// events.Load("onLoad");
})
.EditSettings(edit => { edit.AllowAdding().AllowDeleting().AllowEditing(); })
.ToolbarSettings(toolbar =>
{
toolbar.ShowToolbar().ToolbarItems(items =>
{
items.AddTool(ToolBarItems.Add);
items.AddTool(ToolBarItems.Edit);
items.AddTool(ToolBarItems.Delete);
items.AddTool(ToolBarItems.Update);
items.AddTool(ToolBarItems.Cancel);
});
})
)
<script>
function onEndAdd(sender, args) {
var gridObj = $("#DriversGrid").ejGrid("instance");
gridObj.refreshContent();
};
</script>
My odata contoller
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using System.Web.Http.OData;
using System.Web.Http.OData.Routing;
using Reporter2.Models;
namespace Reporter2.Controllers
{
/*
The WebApiConfig class may require additional changes to add a route for this controller. Merge these statements into the Register method of the WebApiConfig class as applicable. Note that OData URLs are case sensitive.
using System.Web.Http.OData.Builder;
using System.Web.Http.OData.Extensions;
using Reporter2.Models;
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Driver>("Drivers");
config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
*/
public class DriversController : ODataController
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: odata/Drivers
[EnableQuery]
public IQueryable<Driver> GetDrivers()
{
return db.Drivers;
}
// GET: odata/Drivers(5)
[EnableQuery]
public SingleResult<Driver> GetDriver([FromODataUri] int key)
{
return SingleResult.Create(db.Drivers.Where(driver => driver.Id == key));
}
// PUT: odata/Drivers(5)
public IHttpActionResult Put([FromODataUri] int key, Delta<Driver> patch)
{
Validate(patch.GetEntity());
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
Driver driver = db.Drivers.Find(key);
if (driver == null)
{
return NotFound();
}
patch.Put(driver);
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!DriverExists(key))
{
return NotFound();
}
else
{
throw;
}
}
return Updated(driver);
}
// POST: odata/Drivers
public IHttpActionResult Post(Driver driver)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Drivers.Add(driver);
db.SaveChanges();
return Created(driver);
}
// PATCH: odata/Drivers(5)
[AcceptVerbs("PATCH", "MERGE")]
public IHttpActionResult Patch([FromODataUri] int key, Delta<Driver> patch)
{
Validate(patch.GetEntity());
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
Driver driver = db.Drivers.Find(key);
if (driver == null)
{
return NotFound();
}
patch.Patch(driver);
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!DriverExists(key))
{
return NotFound();
}
else
{
throw;
}
}
return Updated(driver);
}
// DELETE: odata/Drivers(5)
public IHttpActionResult Delete([FromODataUri] int key)
{
Driver driver = db.Drivers.Find(key);
if (driver == null)
{
return NotFound();
}
db.Drivers.Remove(driver);
db.SaveChanges();
return StatusCode(HttpStatusCode.NoContent);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool DriverExists(int key)
{
return db.Drivers.Count(e => e.Id == key) > 0;
}
}
}