Данные не отправляются из формы в действие - PullRequest
0 голосов
/ 05 июня 2019

Я использую DataTables.js в приложении ASP.NET MVC.Я хочу обрабатывать вещи на сервере в действии, но, похоже, данные из формы не отправляются в представлении для действия.Я построил некоторый код для проверки этого из этого примера: https://www.c -sharpcorner.com / article / using-datatables-grid-with-asp-net-mvc /

У меня естьпростое представление:

<body>
  <div class="container">
      <br />
      <div style="width:90%; margin:0 auto;">
        <table id="demoGrid" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0">
          <thead>
            <tr>
              <th>CustomerID</th>
              <th>CompanyName</th>
              <th>ContactName</th>
            </tr>
          </thead>
        </table>
      </div>
    </div>
</body>

DataTable настроен так:

$(document).ready(function () {
  $("#demoGrid").DataTable({
    "processing": true,
    "serverSide": true,
    "filter": true,
    "orderMulti": false,
    "pageLength": 5,
    "ajax": {
      "url": "/MOF2/Demo/LoadData",
      "type": "POST",
      "datatype": "json"
    }
  });
});

Действие еще не содержит много:

public ActionResult LoadData()
{
  var draw = Request.Form.GetValues("draw").FirstOrDefault();
  var start = Request.Form.GetValues("start").FirstOrDefault();
  var length = Request.Form.GetValues("length").FirstOrDefault();
  return View();
}

После прочтениябит на https://datatables.net/ и пример, упомянутый выше, я ожидал, что смогу получить некоторые значения здесь.Например, я ожидал, что length будет 5. Хотя я ничего не получаю.Например, Request.Form.GetValues("length") равно нулю.Если я проверю Request.Form.AllKeys, я получу пустую строку.Что может вызвать это?Что необходимо для отправки данных формы с помощью JavaScript и Ajax, чтобы они могли быть прочитаны Request.Form.GetValues()?

Примечание. Я скачал пример проекта, упомянутый в комментарии к примеру выше, и он работает, как и ожидалось.,Я также удалил большую часть кода, не использованного в примере, из этого проекта, и он все еще работает.Я не могу найти разницу между примером проекта и моим проектом.Пример проекта можно найти здесь: https://github.com/saineshwar/DataTablesGridExample

1 Ответ

1 голос
/ 05 июня 2019

Мой коллега нашел решение.URL-адрес в объекте ajax должен быть изменен таким образом, чтобы он использовал @Url.Action() следующим образом:

$(document).ready(function () {
  $("#demoGrid").DataTable({
    "processing": true,
    "serverSide": true,
    "filter": true,
    "orderMulti": false,
    "pageLength": 5,
    "ajax": {
      "url": "@Url.Action("LoadData", "Demo")",
      "type": "POST",
      "datatype": "json"
    }
  });
});

В проекте используется Cookie меньше ASP.NET , что означает, среди прочего,что идентификатор сессии хранится в URL.Когда я указал URL-адрес непосредственно, сеанс был потерян, а вместе с ним и данные формы.

Я не совсем уверен, как именно сессия, идентификатор сеанса и данные формы здесь точно связаны друг с другом, но использование @Url.Action() кажетсярешение в моем случае.

Я отвечаю на свой вопрос здесь, чтобы другие, кто сталкивался с той же проблемой, могли видеть, как она была решена для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...