Telerik Mvc Grid и 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. Спасибо.


person ActionJackson    schedule 20.07.2011    source источник


Ответы (1)


Он не может прикрепить ваш токен, если нет объекта для присоединения. Создайте объект Json и установите для него данные, если данные равны нулю/длине=0/неопределенному (я знаю, что это излишняя проверка). Я выполнил проверку в отдельной функции, чтобы мне не приходилось повторять проверку каждый раз, когда я делаю вызов 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 || {});
person VtoCorleone    schedule 15.03.2012