我在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
答案 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()
似乎是我的解决方案。
我在这里回答自己的问题,以便其他遇到相同问题的人也可以看到如何为我解决。