c# - 数据表 nopcommerce 3.80 中不存在所需的防伪表单字段“__RequestVerificationToken”
问题描述
我想在 nopcommerce 3.80 中获取数据并显示在数据表中。当我当时这样做时,它显示错误,即所需的防伪表单字段“__RequestVerificationToken”不存在。我也添加了antiforgery关键字,只要想把控制器和视图形式放在一起,仍然显示相同的错误。
这是我的表单视图,
<form id="Master-form" name="Master-form">
@Html.AntiForgeryToken()
<div class="content">
<div class="form-horizontal">
<div class="row">
</div>
<div id="product-edit" class="nav-tabs-custom">
<ul class="nav nav-tabs">
@Html.RenderBootstrapTabHeader("tab-country", @T("Admin.Master.Country"), true)
</ul>
<div class="tab-content">
@Html.RenderBootstrapTabContent("tab-country", @TabCountry(), true)
</div>
</div>
</div>
</div>
</form>
这是我的部分观点
<!-- /.row -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
@T("Admin.Master.CountryList")
</div>
<!-- /.panel-heading -->
<div class="panel-body">
<table id="dataGrid" class="table table-striped table-bordered dt-responsive nowrap" width="100%" cellspacing="0">
<thead>
<tr>
<th>Id</th>
<th>Country Name</th>
<th>Active</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
</table>
</div>
<!-- /.panel-body -->
</div>
<!-- /.panel -->
</div>
<!-- /.col-lg-12 -->
</div>
<script>
$(document).ready(function () {
$('#dataGrid').DataTable({
"scrollX": true, // scrolling horizontal
"bSort": false,
"bFilter": false,
"processing": true, // for show progress bar
"serverSide": true, // for process server side
"pageLength": 5,
"lengthMenu": [5, 10, 50, 100, 1000, 10000],
"ajax": {
"url": 'AwazMaster/CountryList',
"type": "POST",
"datatype": "json",
"contentType": "application/json; charset=utf-8"
},
"columnDefs":
[{
"targets": [0],
"visible": false,
"searchable": true,
"orderable": false
}
],
"columns": [
{ "data": "Id", "name": "Id", "autoWidth": true },
{ "data": "CountryName", "name": "service", "autoWidth": true },
{ "data": "IsActive", "name": "active", "autoWidth": true },
{
"render": function (data, type, row) { return "<a class='btn btn-info' onclick=Edit('" + row.Id + "'); >Edit</a>"; }
},
{
"render": function (data, type, row) {
return "<a href='#' class='btn btn-danger' onclick=DeleteData('" + row.Id + "'); >Delete</a>";
}
},
]
});
});
</script>
这是我的控制器,
[HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult CountryList()
{
// Getting all data
var dataList = _MasterService.CountryList(
start: Convert.ToInt32(Request.Form["start"]),
pageSize: Request.Form["length"].ToString() != null ? Convert.ToInt32(Request.Form["length"].ToString()) : 0,
sortColumnName: Request.Form["columns[" + Request.Form["order[0][column]"] + "][name]"],
sortColumnDirection: Request.Form["order[0][dir]"]);
var data = dataList.Select(x => new
{
Id = x.Id,
CountryName = x.CountryName,
IsActive = x.IsActive,
});
//Returning Json Data
Response.StatusCode = 200;
return Json(new { draw = Request.Form["draw"], recordsFiltered = dataList.TotalCount, recordsTotal = dataList.TotalCount, data = data });
}
在浏览器控制台中显示500(内部服务器错误)
解决方案
您必须使用 ajax 请求将__RequestVerificationToken
生成的内部传递给您form
,如下所示:
var token = $('input[name="__RequestVerificationToken"]').val();
"ajax": {
"url": 'AwazMaster/CountryList',
"type": "POST",
"headers": {__RequestVerificationToken : token} // <--- here it is
"datatype": "json",
"contentType": "application/json; charset=utf-8"
},
推荐阅读
- cdi - 如何创建一个 CDI 拦截器,它建议来自 Feign 客户端的方法?
- python - Numpy:在任意方向的数组切片上应用函数
- python - 如何使用 matplotlib 将多个子图绘制到一页?
- python - 比较 3 个数字并返回最大的
- python - 在掩码的结果上调用 pandas 应用函数
- django - Django 静态文件缓存
- python - 如何在 Python 中使用 Selenium 从这个 span 类中获取文本?
- android - 如何仅禁用特定页面的硬件后退按钮
- typescript - 如何使函数处理 (A | B)[] 和 A[] | 的返回值 B[] 在打字稿中等效
- python - 如何使用张量流模型来预测我自己的图像