2014-10-17 3 views
2

В моей сетке работают все операции с crud, единственная проблема заключается в том, что после сохранения новой записи сетка не обновляется до нового идентификатора с контроллера. Я проверил, что идентификатор отправляется обратно с контроллера с моделью, но сетка не обновляется. Поэтому любые последующие изменения одной и той же записи без обновления страницы создают новую запись.Сетка Кендо не обновляет ID после создания

Контроллер:

 [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult AddHoleToJob([DataSourceRequest] DataSourceRequest request, PlannedHolesVM viewModel) 
     { 
      _jobInfoService.AddHole(viewModel); 
      return Json(viewModel, JsonRequestBehavior.AllowGet); 
     } 

Cshtml:

@(Html.Kendo().Grid<PlannedHolesVM>() 
.Name("PlannedHolesKendoGrid") 
.Editable(e => e.Mode(GridEditMode.PopUp).TemplateName("HoleDetails")) 
.Columns(c => 
{ 
    c.Bound(m => m.ID); 
    c.Bound(m => m.HoleSectionLookupName); 
    c.Bound(m => m.HoleSectionTypeLookupHoleSectionType); 
    c.Bound(m => m.HoleSize); 
    c.Command(command => 
    { 
     command.Edit(); 
     command.Destroy(); 
    }); 
}) 
    .ClientDetailTemplateId("template") 
.ToolBar(toolbar => toolbar.Create().Text("Add Hole")) 
.DataSource(ds => ds 
    .Ajax() 
    .Model(model => 
    { 
     model.Id(c => c.ID); 
     model.Field(c => c.JobID); 
     model.Field(c => c.JobID).DefaultValue(ViewBag.Jobid); 
     model.Field(c => c.HoleSectionID); 
     model.Field(c => c.HoleSectionTypeID); 
    }) 
    .Read(read => read.Action("PlannedHolesGridData", "JobRecord", new { jobid = ViewBag.Jobid })) 
    .Destroy(delete => delete.Action("DeleteHoleFromJob", "JobRecord")) 
    .Create(create => create.Action("AddHoleToJob", "JobRecord")) 
    .Update(update => update.Action("AddHoleToJob", "JobRecord")) 
    ) 
    .Events(e => 
    { 
     e.DataBound("dataBound"); 
     e.Save("refreshOnSave"); 
    }) 
) 

Как мне сделать сетку обновить новый идентификатор без вызова читать и вернуться в базу данных?

+0

Вы указали один и тот же URL-адрес для методов «Создать» и «Обновить». – CSharper

+0

Да, это специально. Оба они называют метод сохранения в модифицированной версии архитектуры automapper/entity. – user3738893

ответ

2

После просмотра несколько подобных сообщений и найти пост Telerik, что объясняется, что схема предопределена при использовании бритвы и ожидает данных, которая выглядит как:

{ 
    "Data": [{ 
     "ProductID": 1, 
     "ProductName": "Chai8", 
     "UnitPrice": 18.00, 
     "UnitsInStock": 39, 
     "Discontinued": false 
    }, { 
     "ProductID": 2, 
     "ProductName": "Chang", 
     "UnitPrice": 19.00, 
     "UnitsInStock": 17, 
     "Discontinued": false 
    }], 
    "Total": 2, 
    "AggregateResults": null, 
    "Errors": null 
} 

Я был в состоянии изменить мой контроллер, чтобы вернуть JSon в том, что, как ожидалось, а сетка делает обновление ID. Вот код контроллера:

 [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult AddHoleToJob([DataSourceRequest] DataSourceRequest request, PlannedHolesVM viewModel) 
     { 
      _jobInfoService.AddHole(viewModel); 
      return Json(new { Data = viewModel }); 
     } 

Обратите внимание на столицу D.

0

Проверьте базу данных, чтобы увидеть, если ID устанавливаются как авто incerment, удалить автоматическое приращение от поля идентификатора

+0

Устанавливается для автоматического увеличения. В противном случае, когда я вставляю значение как ноль, идентификатор не будет автоматически создан каркасом сущности. Это новое значение возвращается, но не отражается в сетке. Вы говорите, что сетка Kendo не будет работать с автоматически увеличивающимися полями? – user3738893

Смежные вопросы