0

我正在尝试使用我的网格进行设置,以便每个 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) 有一个名为 data 的属性,它接受一个值字典。但是,FireBug 一直抱怨说“数据未定义”。有什么想法可以在每个请求中包含令牌吗?我正在使用版本 2011.Q2.712。谢谢。

4

1 回答 1

0

如果没有要附加的对象,它就无法附加您的令牌。如果 data 为 null/length=0/undefined(我知道,检查过度),则创建一个 Json 对象并将其设置为 data。我在一个单独的函数中进行了检查,因此我不必在每次进行 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 || {});
于 2012-03-15T17:32:28.197 回答