我正在尝试使用我的网格进行设置,以便每个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版本。感谢。
答案 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 || {});