2016-07-20 10 views
2

グリッドにデータCRUDインラインを作成します。 Createメソッドは正常に終了しました。しかし、私が更新しようとすると、常に新しいデータが作成されます。私はデバッグしようとするとき。常にcreateメソッドに移動します。誰か助けてください。私は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な性質のものであろう発生している作成することを見つけている場合IDを生成するときのグリッド。

アイテムをシステムに保存するとき、私は主キーをどこかで自動的にインクリメントすると仮定しています。このnew IDはグリッドに提示されるモデルに割り当てられる必要がありますので、このアイテムにさらに変更が加えられた場合に更新アクションが生成されることがわかります。コードセクションでそう

uj.Create(jnis); 

変更このそれが戻っモデルにIDを付与するようにします。たぶん、このような何か:

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'イベント' events.RequestEnd( "force_update");を無効にしようとしました。これはデータソースに干渉している可能性があります。 –

0

ダウンロードして@デビッドShorthoseは、IDがどこかの道に沿って逃しする必要があります述べたように

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

下のリンクを使用してフィドラーをインストールします。

あなたがバイオリンを使用して、アクションに送信するか、下のコード行を使用してChromeデベロッパーツール(F12)であなたのグリッドデータをデバッグしているデータを確認:あなたは自分でそれを解決できなかった場合は

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

を収集したデータを報告して、より洞察力のあるお手伝いをしてください。

関連する問題