2011-07-20 205 views
0

我想设置与我的网格的东西,每一个动作,每ajax后会包括antiforgery令牌。我的网格设置像这样: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

如果没有要附加的对象,它无法附加您的令牌。创建一个Json对象,并将其设置为数据,如果数据为null/length = 0/undefined(我知道,检查过度)。我在一个单独的函数中进行了检查,所以我不必在每次进行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 || {});