Обязательное поле формы защиты от подделки "__RequestVerificationToken" отсутствует в datatable nopcommerce 3.80. - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу получить данные и показать в datatable в 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 });
}

Для большей ясности на приведенном выше изображении показана полная ошибка enter image description here

, в то время как в консоли браузера отображается 500 (внутренняя ошибка сервера)

1 Ответ

0 голосов
/ 15 февраля 2019

Вы должны передать __RequestVerificationToken, сгенерированный внутри, в вашем form с вашим запросом ajax следующим образом:

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"
 },
...