2016-07-20 2 views
2

Я хочу сделать данные CRUD inline в сетке. Метод создания успешно выполнен. Но когда я пытаюсь сделать обновление, он всегда создает новые данные. Когда я пытаюсь выполнить отладку. Он всегда идет к методу создания. Пожалуйста, помогите мне. Я использую KendoUI, MVC4 в C#. Благодаря передовойНе удалось обновить данные в сетке Кендо, всегда создавать данные

Модель

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 

namespace admission.Models 
{ 
    public class JenisUjianModel 
    { 
     public JenisUjianModel() { } 

     public int id_jenis_ujian { set; get; } 
     public string jenis_ujian { set; get; } 
     public DateTime tgl_ujian { set; get; } 
     public string created { set; get; } 
     public string createdBy { set; get; } 
     public string modified { set; get; } 
     public string modifiedBy { set; get; } 
     public string flag { set; get; } 
    } 
    public class UjianJenisModel 
    { 
     pmbEntities entities = new pmbEntities(); 

     public IEnumerable<JenisUjianModel> Read() 
     { 
      return entities.Tbl_Jenis_Ujian.Select(jnis => new JenisUjianModel 
      { 
       id_jenis_ujian = jnis.id_jenis_ujian, 
       jenis_ujian = jnis.jenis_ujian, 
       tgl_ujian = jnis.Tgl_Ujian.Value 
      }).OrderBy(u => u.id_jenis_ujian); 
     } 

     public void Create(JenisUjianModel jnis) 
     { 
      var entity = new Tbl_Jenis_Ujian(); 
      int last = entities.Tbl_Jenis_Ujian.Max(u => u.id_jenis_ujian); 
      int coun = entities.Tbl_Jenis_Ujian.Count(); 
      if (coun == 0) 
      { 
       entity.id_jenis_ujian = 0; 
      } 
      else 
       entity.id_jenis_ujian = last + 1; 

      entity.jenis_ujian = jnis.jenis_ujian; 
      entity.Tgl_Ujian = jnis.tgl_ujian; 
      entity.created = DateTime.Now; 
      entity.flag = "Y"; 

      entities.Tbl_Jenis_Ujian.Add(entity); 
      entities.SaveChanges(); 

     } 

     public void Update(JenisUjianModel jnis) 
     { 
      var entity = new Tbl_Jenis_Ujian(); 
      entity.id_jenis_ujian = jnis.id_jenis_ujian; 
      entity.jenis_ujian = jnis.jenis_ujian; 
      entity.Tgl_Ujian = jnis.tgl_ujian; 
      entity.modified = DateTime.Now; 
      entity.modifiedBy = jnis.modifiedBy; 
      entity.created = DateTime.Parse(jnis.created); 
      entity.createdBy = jnis.createdBy; 
      entity.flag = jnis.flag; 

      entities.Tbl_Jenis_Ujian.Attach(entity); 
      entities.Entry(entity).State = EntityState.Modified; 
      entities.SaveChanges(); 
     } 

     public void Destroy(JenisUjianModel jnis) 
     { 
      var entity = new Tbl_Jenis_Ujian(); 
      entity.id_jenis_ujian = jnis.id_jenis_ujian; 
      entity.jenis_ujian = jnis.jenis_ujian; 
      entity.Tgl_Ujian = jnis.tgl_ujian; 
      entity.modified = DateTime.Parse(jnis.modified); 
      entity.modifiedBy = jnis.modifiedBy; 
      entity.created = DateTime.Parse(jnis.created); 
      entity.createdBy = jnis.createdBy; 
      entity.flag = "N"; 

      entities.Tbl_Jenis_Ujian.Attach(entity); 
      entities.Entry(entity).State = EntityState.Modified; 
      entities.SaveChanges(); 
     } 
    } 
} 

Контроллер

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using admission.Models; 
using Kendo.Mvc.Extensions; 
using Kendo.Mvc.UI; 
using System.Data.Entity; 

namespace admission.Controllers 
{ 
    public class UjianController : Controller 
    { 
     // 
     // GET: /Ujian/ 

     UjianJenisModel uj = new UjianJenisModel(); 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult JenisUjian() { return View(); } 

     public ActionResult jenisUjian_read([DataSourceRequest] DataSourceRequest request) 
     { 
      return Json(uj.Read().ToDataSourceResult(request)); 
     } 

     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult jenisUjian_Create([DataSourceRequest] DataSourceRequest request, JenisUjianModel jnis) 
     { 
      if (ModelState.IsValid) 
      { 
       uj.Create(jnis); 
      } 

      return Json(new[] { jnis }.ToDataSourceResult(request, ModelState)); 
     } 
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult jenisUjian_Update([DataSourceRequest] DataSourceRequest request, JenisUjianModel jnis) 
     { 
      if (ModelState.IsValid) 
      { 
       uj.Update(jnis); 
      } 

      return Json(new[] { jnis }.ToDataSourceResult(request, ModelState)); 
     } 
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult jenisUjian_Delete([DataSourceRequest] DataSourceRequest request, JenisUjianModel jnis) 
     { 
      if (jnis != null) 
      { 
       uj.Destroy(jnis); 
      } 

      return Json(new[] { jnis }.ToDataSourceResult(request, ModelState)); 
     } 

    } 
} 

Посмотреть

@using Kendo.Mvc.Extensions 

@{ 
    ViewBag.Title = "JenisUjian"; 
    Layout = "~/Views/Shared/_adminLayout.cshtml"; 
} 

<div class="tables"> 
    <div class="table-responsive bs-example widget-shadow"> 
     <h4>Data Propinsi:</h4> 
      @(Html.Kendo().Grid<admission.Models.JenisUjianModel>() 
    .Name("gridss") 
    .Columns(columns => 
    { 
     columns.Bound(p => p.id_jenis_ujian).Hidden(); 
     columns.Bound(p => p.jenis_ujian).Title("Jenis Ujian"); 
     columns.Bound(p => p.tgl_ujian).Title("Tgl Ujian").Format("{0: dd MMM yyyy - HH:mm WIB}"); 
     columns.Command(command => { command.Edit(); command.Destroy(); }).Width(250); 
    }) 
    .ToolBar(toolbar => toolbar.Create()) 
    .Editable(editable => editable.Mode(GridEditMode.InLine)) 
    .Pageable() 
    .Sortable() 
    .Filterable() 
    .HtmlAttributes(new { style = "height:570px;" }) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .PageSize(10) 
     .Events(events => 
     { 
      events.Error("error_handler"); 
      events.RequestEnd("force_update"); 
     }) 
     .Model(model => model.Id(p => p.id_jenis_ujian)) 
     .Create(update1 => update1.Action("jenisUjian_Create", "Ujian")) 
     .Update(update2=> update2.Action("jenisUjian_Update", "Ujian")) 
     .Read(read => read.Action("jenisUjian_read", "Ujian")) 
     .Destroy(update3 => update3.Action("jenisUjian_Delete", "Ujian")) 
    ) 
) 
    </div> 
</div> 

<script type="text/javascript"> 
    function error_handler(e) {  
     if (e.errors) { 
      var message = "Errors:\n"; 
      $.each(e.errors, function (key, value) { 
       if ('errors' in value) { 
        $.each(value.errors, function() { 
         message += this + "\n"; 
        }); 
       } 
      });   
      alert(message); 
     } 
    } 
</script> 
<script type="text/javascript"> 
    function force_update(e) { 
     if (e.type === "create") { 
      location.reload(); 
     } 
    } 
</script> 

ответ

0

Если вы обнаружили, что создание всегда встречающийся это будет из-за default природы сетка при генерации идентификатора.

При сохранении элемента обратно в систему я предполагаю, что он будет автоматически увеличивать первичный ключ. Этот идентификатор new должен быть привязан к модели, которая возвращается обратно в сетку, чтобы он знал, что действие обновления должно быть сгенерировано, если к этому элементу будут сделаны дополнительные изменения.

Таким образом, в секции кода:

uj.Create(jnis); 

Изменить это так, что он присваивает идентификатор обратно в модель. Может быть, что-то вроде этого:

jnis.id_jenis_ujian = uj.Create(jnis); 

или

jnis = uj.Create(jnis); 

затем изменить Создание подписи вернуть либо Int или модель назад, а не иметь его в пустоте.

public int Create(JenisUjianModel jnis) 
{ 
    ....Code removed for brevity 
    int returnId = lastId + 1; 

    return returnId; 
} 

или

public JenisUjianModel Create(JenisUjianModel jnis) 
    { 
     ....Code removed for brevity 
     jnis.id_jenis_ujian = lastId + 1; 

     return jnis; 
    } 

Надеюсь, это поможет вам.

Любые вопросы не стесняйтесь спрашивать.

+0

не работал. Он по-прежнему создает новые данные. Не удалось обновить –

+0

Я раньше не заметил, но попробуйте отключить событие 'update' event.RequestEnd (" force_update "); это может помешать источнику данных, поэтому перезагрузка состояния' cached ' –

0

Скачать и установить Скрипач, используя ссылку ниже

https://www.telerik.com/download/fiddler

Как уже упоминалось @David Shorthose идентификатор должен быть пропущен где-то по пути.

Проверьте данные, которые вы отправляете на ваши действия, используя Fiddler или отладочных данных грид инструментов разработчика Chrome (F12), используя строку кода ниже:

debugger; 
$("#gridss").data("kendoGrid").dataSource.data(); 

Если вы не смогли решить эту проблему самостоятельно, то сообщите данные, которые вы собрали, чтобы помочь нам в более глубоком понимании.

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

  • Нет связанных вопросов^_^