Telerik Mvc Grid和AntiForgeryToken

时间:2011-07-20 17:37:53

标签: telerik antiforgerytoken

我正在尝试使用我的网格进行设置,以便每个ajax帖子的每个操作都包含一个防伪令牌。我的网格设置如下:

 @(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(Test)的处理程序如下所示:

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

我认为论证(e)有一个叫做数据的属性,它接受了一个价值字典。但是,FireBug一直抱怨称“数据未定义”。有什么想法我可以在每个请求中包含令牌吗?我使用的是2011.Q2.712版本。感谢。

1 个答案:

答案 0 :(得分: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 || {});