Telerik Mvc Grid и AntiForgeryToken - PullRequest
0 голосов
/ 20 июля 2011

Я пытаюсь настроить свою сетку так, чтобы каждое действие, которое каждый пост 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.Спасибо.

1 Ответ

0 голосов
/ 15 марта 2012

Невозможно прикрепить ваш токен, если нет объекта для присоединения.Создайте объект Json и установите его в data, если data имеет значение 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 || {});
...