没有数据从表单发送到操作

时间:2019-06-05 09:51:33

标签: c# ajax asp.net-mvc datatables

我在ASP.NET MVC应用程序中使用DataTables.js。我想在动作中处理服务器上的内容,但是似乎没有从视图中的表单向动作发送数据。我已经通过以下示例构建了一些代码对此进行测试: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 个答案:

答案 0 :(得分:1)

我的一位同事找到了解决方案。应该更改ajax对象中的URL,以便它像这样使用@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 less ASP.NET,这意味着,其中,会话ID存储在URL中。当我直接指出URL时,会话丢失了,表单数据也丢失了。

我不完全确定会话,会话ID和表单数据在这里如何精确地联系在一起,但是使用@Url.Action()似乎是我的解决方案。

我在这里回答自己的问题,以便其他遇到相同问题的人也可以看到如何为我解决。