2016-11-07 3 views
0

私は自分のページにグリッドを定義します。KendoUIグリッドの更新は問題

<div id="grid"></div> 
<script> 
$(document).ready(function() { 
    var crudServiceBaseUrl = "http://demos.kendoui.com/service", 
     dataSource = new kendo.data.DataSource({ 
      transport: { 
       read: { 
        url: "/Grid/GetPerson", 
        dataType: "json", 
        contentType: 'application/json; charset=utf-8', 
        type: 'Get' 
       }, 
       update: { 

        url: function (person) { 
         debugger; 
         return "/Grid/Update"; 
        }, 
        contentType: 'application/json; charset=utf-8', 
        type: "POST", 

       }, 
       destroy: { 
        url: crudServiceBaseUrl + "/Products/Destroy", 
        dataType: "jsonp" 
       }, 
       create: { 
        url: crudServiceBaseUrl + "/Products/Create", 
        dataType: "jsonp" 
       }, 
       parameterMap: function (options, operation) { 
        if (operation !== "read" && options.models) { 
         return { models: kendo.stringify(options.models) }; 
        } 
       } 
      }, 
      batch: true, 
      pageSize: 20, 
      schema: { 
       model: { 
        id: "ID", 
        fields: { 
         ID: { type: "number", editable: false, nullable: true }, 
         Name: { validation: { required: true } }, 
         Family: { validation: { required: true, min: 1 } }, 
         Tel: {} 
        } 
       } 
      } 
     }); 

    $("#grid").kendoGrid({ 
     dataSource: dataSource, 
     pageable: true, 
     height: 430, 
     toolbar: ["create"], 
     columns: [ 
      { field: "Name", title: "نام" }, 
      { field: "Family", title: "فامیل" }, 
      { field: "Tel", title: "تلفن", width: "100px" }, 
      { command: [{ name: "edit", text: "ویرایش" }, { name: "destroy", text: "حذف" }], title: "عملیات", width: "160px" }], 
     messages: { 
      editable: { 
       cancelDelete: "لغو", 
       confirmation: "آیا مایل به حذف این رکورد هستید؟", 
       confirmDelete: "حذف" 
      }, 
      commands: { 
       create: "افزودن ردیف جدید", 
       cancel: "لغو کلیه‌ی تغییرات", 
       save: "ذخیره‌ی تمامی تغییرات", 
       destroy: "حذف", 
       edit: "ویرایش", 
       update: "ثبت", 
       canceledit: "لغو" 
      } 
     }, 
     editable: "popup" 
    }); 
}); 

update機能でpersonパラメータでは、iを変更された行にアクセスすることができます。

person.models[0] 

それは私を与えます:

Object {ID:1,Name:"pejman",Family:"kam",Tel:"098787887"} 

だから私は、サーバーにこのデータを送信したいので、私はGridControllerでアクションを持っている:updateメソッドで

url: function (person) { 
     return "/Grid/Update/" + JSON.stringify(person.models[0]) 
    }, 

、それはdoesnの:

[HttpPost] 
    public void Update(TblPerson person) 
    { 
     //do update 
    } 

それを行うために、私がしようそれはどうしたらいいですか? 注:

URL:http://localhost:2145/Grid/Update/%7B%22ID%22:1,%22Name%22:%22pejman%22,%22Family%22:%22kam%22,%22Tel%22:%22098787878%22%7D 
Status Code:400 Bad Request 

答えて

0

問題がkendo.stringify(options.models)はJSON文字列で、あなたのオブジェクトを送信していることである:私は、ブラウザの[ネットワーク]タブで上記の使用している場合は、私にBad Reuestエラーを与えます。だから私はあなたのjsコードがそのままであると信じています。コントローラーのUpdateメソッドを次のように変更してください:

[HttpPost] 
public void Update(string models) 
{ 
    var values = JsonConvert.DeserializeObject<IEnumerable<TblPerson>>(models); 

    foreach (var value in values) 
    { 
     //Your action 
    } 
} 

上記のアプローチは、更新するモデルをさらに送ることができると仮定しています。 Newtonsoft.Jsonを使用することを忘れないでください。

+0

POSTコールでデータを送信していないので、JSONをURLに追加するため、これは機能しません。 – jorgonor

+0

彼は試したことを示しただけですが、上のコードがこれで動作しています。私は同じものを使用しています。 – Ademar

+0

MVCは、 'HttpPost'アクションとして宣言されているにもかかわらず、クエリ文字列内に' models'をバインドしていると思います。私は十分にそれを十分に考えなかった、今私はそれを得た。 :) – jorgonor