2017-04-26 7 views
1

私はMVC剣道グリッドを持っており、jQuery Ajax Callで記入したいと思います。私は(ない完全に)データで満たされている私の剣道グリッドを見ることができますASP.NET MVCを実装する剣道グリッドを使ってAjax呼び出し

function FillRowsByRequest(reqRow) { 
     var readDataUrl = '@Url.Action("GetGoodsByReq")'; 
     var targetGrid = $("#storeReceiptRowsGrid").data("kendoGrid"); 

     $.get(readDataUrl, { reqseq: reqRow }, function (d, t, j) { 
      var counter = 0; 
      targetGrid.cancelChanges(); 
      $(d).each(function (i, e) { 
       targetGrid.dataSource.insert(counter++, { 
        GOOD_ID: e.GOOD_ID, 
        GOOD_CODE: e.GOOD_CODE, 
        GOOD_CODE_DESC: e.GOOD_CODE_DESC, 
        GOOD_DESC: e.GOOD_DESC 
       }); 
      }); 
     }); 
    } 

が、事は、私は[保存]ボタンをクリックしたときに、それがないということです:私はこのようにそれを行うには「各」メソッドをjQueryのを使用しましたアクションの保存方法をトリガしないため、テーブルに何も挿入されず、グリッドがリフレッシュされても何も表示されません。

@(Html.Kendo() 
    .Grid<Tpph.Models.STORE_RECEIPT_ROW>() 
    .Name("storeReceiptRowsGrid") 
    .Columns(columns => 
    { 
     columns.Bound(o => o.GOOD_ID).Title("Good ID").HtmlAttributes(new { @class = "goodid" }).Visible(false); 
     columns.Bound(o => o.GOOD_CODE).Title("Good Code").HtmlAttributes(new { @class = "goodcode" }).Width(100); 
     columns.Bound(o => o.GOOD_CODE_DESC).Title("Good Code Desc").HtmlAttributes(new { @class = "goodcodedesc" }).Width(100); 
     columns.Bound(o => o.GOOD_DESC).Title("Good Desc").HtmlAttributes(new { @class = "gooddesc" }).Width(155); 
    }) 
    .ToolBar(toolbar => 
    { 
     toolbar.Create().Text("New Row").HtmlAttributes(new { @class = "k-primary", style = "background-color: #e6ffe6; border-color: #10c4b2; min-width: 100px; color: black;" }); 
     toolbar.Save().Text("Save").SaveText("Save").CancelText("Cancel").HtmlAttributes(new { @class = "k-primary", style = "background-color: #e6ffe6; border-color: #10c4b2; min-width: 100px; color: black;" }); 
    }) 
    .ColumnMenu() 
    .Selectable(s => s.Type(GridSelectionType.Row)) 
    .Sortable() 
    .Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation("Delete?")) 
    .Filterable() 
    .Groupable() 
    .Scrollable() 
    .Pageable(p => p.Refresh(true)) 
    .Resizable(resize => resize.Columns(true)) 
    .Reorderable(reorder => reorder.Columns(true)) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .Events(ev => ev.RequestEnd("storeReceiptRowsGridOnRequestEnd")) 
     .Batch(true) 
     .ServerOperation(true) 
     .Model(model => 
     { 
      model.Id(p => p.GOOD_ID); 
     }) 
     .Read(read => read.Action("StoreReceiptRowsRead", "StorageForms")) 
     .Update(u => u.Action("StoreReceiptRowsEdit", "StorageForms")) 
     .Create(c => c.Action("StoreReceiptRowsCreate", "StorageForms")) 
     .Destroy(de => de.Action("StoreReceiptRowsDestory", "StorageForms"))) 
    .Events(ev => 
    { 
     ev.DataBound("storeReceiptRowsGridOnBound"); 
    }) 
    ) 

どうすればいいですか?

+0

はAjax呼び出しによって、私が記入するとしますこれらのフィールドをクリックし、[保存]ボタンをクリックすると、データが保存されます。手動でフィールドに入力すると動作しますが、jQuery Ajaxを呼び出してグリッドにデータを入力すると、アクションの保存メソッドがトリガされません。 –

+0

上記のコードにajaxcallを追加してください。 – TechVision

+0

dataSourceの '.Create'イベントを正しくフックアップしていれば、JSでAJAX呼び出しをする必要はありません。あなたのコントローラー関数 'StoreReceiptRowsCreate'をポストしてください。 – Sandman

答えて

0

この問題で多くの苦労をした結果、行の「ダーティ」属性がtrueに設定されている場合にのみ、剣道グリッドがCRUDアクションメソッドをトリガすることがわかりました。 (汚れた旗は、そのセルを編集するときにセルの隅に表示される小さな赤い三角形です)。だから、この問題を解決するには、次のようにtrueに各行のダーティフラグを設定している:

.set("dirty", true); 

は、だから私の最終的なJavaScriptのコードは、このようなものです:

function FillRowsByRequest(reqRow) { 
     var readDataUrl = '@Url.Action("GetGoodsByReq")'; 
     var targetGrid = $("#storeReceiptRowsGrid").data("kendoGrid"); 

     $.get(readDataUrl, { reqseq: reqRow }, function (d, t, j) { 
      var counter = 0; 
      targetGrid.cancelChanges(); 
      $(d).each(function (i, e) { 
       targetGrid.dataSource.insert(counter++, { 
        GOOD_ID: e.GOOD_ID, 
        GOOD_CODE: e.GOOD_CODE, 
        GOOD_CODE_DESC: e.GOOD_CODE_DESC, 
        GOOD_DESC: e.GOOD_DESC 
       }).set("dirty", true); 
      }); 
     }); 
    } 
関連する問題