2016-07-31 9 views
0

私は剣道UI Javascript - kendoGrid(ASP.NET MVCではなく)とその背後にあるASP.NET MVCを使用しています。剣道UI JSON結果からASP.NET MVC5へパラメータとしてのアクション

私は質問があります。

オートシンク= falseのバッチ=真の私は剣道でのdataSourceの同期方法を実行します。

autoSync = trueの場合、ActionメソッドのパラメータはJSON objを認識します。 falseに設定されている場合は表示されません。

kendoGridのsaveイベントで呼び出そうとしましたが、何もしませんでした。

のViewModel:

public class TaskControllerViewModel 
{ 
    public string Address { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string FirstName { get; set; } 
    public int Id { get; set; } 
    public bool IsActive { get; set; } 
    public string LastName { get; set; } 
    public string UserName { get; set; } 
} 

コントローラー:

public ActionResult Edit(TaskControllerViewModel model) 

ビュー:

<script> 
$(function() { 

    var dataSource = new kendo.data.DataSource({   
     transport: { 
      read: { 
       url: "@Url.Action("GetAllUsers","Task")", 
       dataType: "json" 
      }, 
      update: { 
       url: "@Url.Action("Edit","Task")", 
       dataType: "json", 
       contentType: "application/json;charset=utf-8", 
       type:"POST" 
      }, 
      destroy: { 
       url: "@Url.Action("Delete","Task")", 
       dataType: "json", 
       contentType: "application/json;charset=utf-8", 
       type:"POST" 
      }, 
      parameterMap: function(data,type) 
      {      
       return kendo.stringify(data); 
      } 
     }, 
     schema: { 
      model: { 
        id: "Id", 
        fields: { 
         Id: { editable: false }, 
         UserName: { type: "string" }, 
         FirstName: { type: "string" }, 
         LastName: { type: "string" }, 
         Address: { type: "string" }, 
         IsActive: { type: "boolean" }, 
         DateCreated: { type: "date" } 
        } 
       } 
     }, 
     batch: true, 
     pageSize: 20,   
    }); 

    $("#allUsers").kendoGrid({ 
     dataSource:dataSource, 
     height: 550, 
     groupable: true, 
     sortable: true, 
     pageable: { 
      refresh: true, 
      pageSizes: true, 
      buttonCount: 5 
     }, 
     columns: [ 
     { field: "UserName",title: "User Name" }, 
     { field: "FirstName",title: "First Name" }, 
     { field: "LastName",title: "Last Name" }, 
     { field: "Address",title: "Address" }, 
     { field: "IsActive",title: "Active" }, 
     { field: "DateCreated",title: "Join Date",format: "{0:dd-MM-yyyy}" }, 
     { command: "edit" }, 
     { command: "destroy" } 
     ], 
     editable: { 
      mode: "inline", 
      update: true, 
      destroy: true, 
      confirmation: true 
     }, 
     edit: function (event) { 
      console.log("at edit event"); 

     }, 
     save: function(event) 
     { 
      console.log("at saveChanges event"); 
      dataSource.sync(); 
     } 

    }); 
}); 
をすべての助けを事前に感謝:)

は、ここで私がやったものです

+0

ご迷惑をおかけして申し訳ありませんが、少し発疹がありました。 autoSyncをオフにすると、変更は自動的にサーバーへの呼び出しをトリガーしません。バッチをtrueに設定すると、グリッドがどのように変更を送信するかが決まります。私はセーブイベントを引き起こさなければならないと信じています。この例のように - http://demos.telerik.com/kendo-ui/grid/editingここに保存ボタンがあります。私はこれがもっと助けになることを願っています。 – Wade73

答えて

0

解決しました。

バッチ編集を有効にすると、JSONオブジェクトが配列としてコントローラに渡されます。コントローラーアクション内のパラメーターをリストやその他のIEnumerableに変更する必要があります。

ここ

は、各項目を通じてあなただけのループ、私のサンプルのコードです:

コントローラーアクション:

public JsonResult Edit(List<TaskControllerViewModel> model) 
    { 
     foreach(var item in model) 
     { 
      var userToEdit = users.GetUser(item.Id); 

      if(userToEdit != null) 
      { 
       userToEdit.Contact.FirstName = item.FirstName; 
       userToEdit.Contact.LastName = item.LastName; 
       userToEdit.Username = item.UserName; 
       userToEdit.Contact.Address = item.Address; 
       userToEdit.IsActive = item.IsActive; 
      } 
      unitOfWork.SaveChanges(); 
     } 

     return Json(model); 
    } 

のViewModel:

public class TaskControllerViewModel 
{ 
    public string Address { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string FirstName { get; set; } 
    public int Id { get; set; } 
    public bool IsActive { get; set; } 
    public string LastName { get; set; } 
    public string UserName { get; set; } 
} 

ビュー:

<script> 
$(function() { 

    var dataSource = new kendo.data.DataSource({   
     transport: { 
      read: { 
       url: "@Url.Action("GetAllUsers","Task")", 
       dataType: "json" 
      }, 
      update: { 
       url: "@Url.Action("Edit","Task")", 
       dataType: "json", 
       contentType: "application/json;charset=utf-8", 
       type:"POST" 
      }, 
      destroy: { 
       url: "@Url.Action("Delete","Task")", 
       dataType: "json", 
       contentType: "application/json;charset=utf-8", 
       type:"POST" 
      }, 
      parameterMap: function(data,type) 
      {      
       return kendo.stringify(data.models);    
      } 
     }, 
     schema: { 
      model: { 
        id: "Id", 
        fields: { 
         Id: { editable: false }, 
         UserName: { type: "string" }, 
         FirstName: { type: "string" }, 
         LastName: { type: "string" }, 
         Address: { type: "string" }, 
         IsActive: { type: "boolean" }, 
         DateCreated: { type: "date" } 
        } 
       } 
     }, 
     batch: true, 
     pageSize: 20,   
    }); 

    $("#allUsers").kendoGrid({ 
     dataSource:dataSource, 
     height: 550, 
     groupable: true, 
     sortable: true, 
     navigatable: true, 
     pageable: { 
      refresh: true, 
      pageSizes: true, 
      buttonCount: 5 
     }, 
     columns: [ 
     { field: "UserName",title: "User Name" }, 
     { field: "FirstName",title: "First Name" }, 
     { field: "LastName",title: "Last Name" }, 
     { field: "Address",title: "Address" }, 
     { field: "IsActive",title: "Active" }, 
     { field: "DateCreated",title: "Join Date",format: "{0:dd-MM-yyyy}" }, 
     { command: "destroy" } 
     ], 
     toolbar: ["save","cancel"], 
     editable: { 
      mode: "incell", 
      update: true, 
      destroy: true, 
      confirmation:true 
     },   
     edit: function (event) { 
      console.log("at edit event"); 

     }, 
     save: function(event) 
     { 
      console.log("at saveChanges event"); 
     },   
    }); 
}); 

これは将来的に誰かを助けてくれることを願っています。

関連する問題