2011-07-20 41 views
0

私はすべてのAjax投稿に偽造防止トークンが含まれるような行動をするように、グリッドを設定しようとしています。私girdはそうのように設定されている:Telerik Mvc GridとAntiForgeryToken

@(Html.Telerik().Grid(Model) 
    .Name("Folks") 
    .Sortable(x => x.SortMode(GridSortMode.SingleColumn)) 
    .PrefixUrlParameters(false) 
    .Footer(true) 
    .Pageable(x => x.PageSize(25).Total((int)ViewData["total"])) 
    .DataBinding(dataBinding => dataBinding.Ajax()) 
    .Columns(columns => 
    { 
     columns.Bound(o => o.FirstName).Width(120).Title("First Name"); 
     columns.Bound(o => o.LastName).Width(120).Title("Last Name"); 
    }) 
    .Selectable() 
    .ClientEvents(events => 
    { 
     events.OnDataBinding("Test"); 
    }) 
) 

OnDataBinding(テスト)のためのハンドラがそうのようになります。

<script type="text/javascript"> 
     function Test(e) { 
      var valTokenValue = $("input[name=__RequestVerificationToken]").val(); 
      e.data = { __RequestVerificationToken: valTokenValue }; 
     } 
    </script> 

私は、引数(e)はの辞書を受け入れたデータと呼ばれるプロパティを持っていたと思いました値。しかし、FireBugは「データは未定義」であると不平を言っています。どんなアイデアをどのように私はすべての要求とトークンを含めることができますか?バージョン2011.Q2.712を使用しています。ありがとう。

答えて

0

添付するオブジェクトがない場合、トークンを添付できません。データがnull/length = 0/undefinedの場合、Jsonオブジェクトを作成し、それをデータに設定します(私が知っているのは、チェックの過度なことです)。別の関数でチェックしたので、ajaxを呼び出すたびにチェックを繰り返す必要はありませんでした。

(function (TelerikGrid, $, undefined) { 
TelerikGrid.OnDataBinding = function (e) { 
    e.data = AntiForgery.AddToken(e.data); 
};})(window.TelerikGrid = window.TelerikGrid || {}, jQuery); 


(function (AntiForgery, undefined) { 
AntiForgery.AddToken = function (data) { 
    data = ((data == null || data.length == 0 || data == undefined) ? { } : data); 
    data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val(); 
    return data; 
}; 
})(window.AntiForgery = window.AntiForgery || {}); 
関連する問題