Question

I am building an MVC, Entities application with KendoGrids.

I have build this kendoGrid

    @(Html.Kendo().Grid<ModelApp.Models.Tickets>()
.Name("ticketgrid")
.Columns(columns =>
    {

        columns.Bound(p => p.TicketID).Title("ID");
        columns.ForeignKey(p => p.CustomerID, (System.Collections.IEnumerable)ViewData["customers"], "CustomerID", "CustomerName").Title("Customer");
        columns.ForeignKey(p => p.AreaOfBusinessID, (System.Collections.IEnumerable)ViewData["areaofbusinesses"], "AreaOfBusinessID", "AreaOfBusiness1").Title("AreaOfBusiness");
         columns.Bound(p => p.OccurredOn).Title("Occured").Format("{0:yyyy-MM-dd}");
        columns.ForeignKey(p => p.SeverityID, (System.Collections.IEnumerable)ViewData["severities"], "SeverityID", "Severity1").Title("Severity");
        columns.ForeignKey(p => p.AssigneeID, (System.Collections.IEnumerable)ViewData["assignees"], "AssigneeID", "AssigneeName").Title("Assignee");
        columns.ForeignKey(p => p.TicketStatusID, (System.Collections.IEnumerable)ViewData["ticketstatuses"], "TicketStatusID", "TicketStatus1").Title("Status");
        columns.Bound(p => p.UserID).Title("User");
        columns.Bound(p => p.DateRegistered).Title("Registered").Format("{0:yyyy-MM-dd}");
})
.DataSource(dataSource => 
    dataSource
.Ajax()
.Model(model => model.Id(p => p.TicketID))
.Read(read => read.Action("Index","Ticket"))
.Create(create => create.Action("Create", "Ticket"))
.Update(update => update.Action("Edit", "Ticket"))
//.Destroy(destroy => destroy.Action("Delete", "Ticket"))        
    )
    .Pageable()
    .Editable(editing => editing.Mode(GridEditMode.InCell))
    .ToolBar(toolbar =>
    {
        toolbar.Create();
        toolbar.Save();
    })
    .Navigatable()
    .Selectable()

    )

and I am facing 2 problems

1)The TicketID column is an identity column. When I select the Create button it fetches a zero. How can I make the Gid understand that it should not mess with this column and that the database will handle it? Of course, no insert is being made anyway which takes me to the second question

2)The Edit does not post to database

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit([DataSourceRequest] DataSourceRequest request, IEnumerable<ModelApp.Models.Tickets> models)
    {
        if (models != null)
        {
            try
            {
                foreach (var updatedEntity in models)
                {
                    var itemToUpdate = db.Tickets.Where(p => p.TicketID == updatedEntity.TicketID).FirstOrDefault();
                    if (itemToUpdate != null)
                    {
                        itemToUpdate.CustomerID = updatedEntity.CustomerID;
                        itemToUpdate.AreaOfBusinessID = updatedEntity.AreaOfBusinessID;
                        itemToUpdate.AssigneeID = updatedEntity.AssigneeID;
                        itemToUpdate.OccurredOn = updatedEntity.OccurredOn;
                        itemToUpdate.SeverityID = updatedEntity.SeverityID;
                        itemToUpdate.DateRegistered = updatedEntity.DateRegistered;
                        itemToUpdate.UserID = updatedEntity.UserID;
                        db.SaveChanges();
                        ModelState.Clear();
                    }
                }
            }
            catch (Exception e)
            {
                db.add_exception_log(e.Message, "UPDATE RATES");

            }
        }
        return Json(ModelState.ToDataSourceResult());
    }

because models is null. Any clues why?

Thanx in advance

Was it helpful?

Solution

1) You should make the field non-editable inside of the Model configurator of the dataSource

model=>{
    model.Fiedl(p=>p.TicketID).Editable(false);
}

2) You are not using batch editing to expect collection - change the signate to expect single record

public ActionResult Edit([DataSourceRequest] DataSourceRequest request, ModelApp.Models.Tickets model)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top