/ / Telerik Mvc Grid i AntiForgeryToken - telerik, antiforgerytoken

Telerik Mvc Grid i AntiForgeryToken - telerik, antiforgerytoken

Próbuję ustawić rzeczy w mojej siatce tak, że każda akcja, w której każdy post ajaxowy będzie zawierał token antifgery. Mój pas jest tak skonfigurowany:

 @(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");
})
)

Procedura obsługi OnDataBinding (Test) wygląda tak:

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

Myślałem, że argument (e) ma właściwość o nazwiedane, które przyjęły słownik wartości. Jednak FireBug narzeka, że ​​„dane są niezdefiniowane”. Jakieś pomysły, w jaki sposób mogę dołączyć token do każdego żądania? Używam wersji 2011.Q2.712. Dzięki.

Odpowiedzi:

0 dla odpowiedzi № 1

Nie może dołączyć twojego tokena, jeśli nie ma obiektudołączyć do. Utwórz obiekt Json i ustaw go na dane, jeśli dane mają wartość null / length = 0 / undefined (wiem, przesadzam przy sprawdzaniu). Sprawdziłem osobną funkcję, więc nie musiałbym powtarzać sprawdzania za każdym razem, gdy wykonałem wywołanie 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 || {});