C# 没有数据从表单发送到操作
我正在ASP.NET MVC应用程序中使用DataTables.js。我想在一个操作中处理服务器上的事情,但似乎没有数据从视图中的表单发送到该操作。我已经构建了一些代码来测试这个示例: 我有一个简单的看法:C# 没有数据从表单发送到操作,c#,ajax,asp.net-mvc,datatables,C#,Ajax,Asp.net Mvc,Datatables,我正在ASP.NET MVC应用程序中使用DataTables.js。我想在一个操作中处理服务器上的事情,但似乎没有数据从视图中的表单发送到该操作。我已经构建了一些代码来测试这个示例: 我有一个简单的看法: <body> <div class="container"> <br /> <div style="width:90%; margin:0 auto;"> <table id="demoGrid
<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>
该行动还没有包含太多内容:
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();
}
在阅读了上面提到的示例之后,我希望能够在这里得到一些值。例如,我期望长度为5。但我什么也没得到。例如,Request.Form.GetValueslength为null。如果我选中Request.Form.AllKeys,我会得到一个空字符串。这是什么原因造成的?JavaScript和Ajax发送表单数据以便Request.form.GetValues读取表单数据需要什么
注意:我已经下载了上面例子的评论中提到的一个例子项目,它按照预期工作。我还从该项目中剥离了示例中未使用的大部分代码,并且仍然有效。不过,我真的找不到示例项目和我的项目之间的区别。示例项目可以在这里找到:我的一位同事找到了解决方案。应更改ajax对象中的URL,使其使用@URL.Action,如下所示:
$(document).ready(function () {
$("#demoGrid").DataTable({
"processing": true,
"serverSide": true,
"filter": true,
"orderMulti": false,
"pageLength": 5,
"ajax": {
"url": "/MOF2/Demo/LoadData",
"type": "POST",
"datatype": "json"
}
});
});
$(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"
}
});
});
项目使用,这意味着,除其他外,会话id存储在URL中。当我直接指出URL时,会话丢失了,表单数据也随之丢失
我不完全确定会话、会话id和表单数据在这里到底是如何联系在一起的,但在我的情况下,使用@Url.Action似乎是解决方案
我在这里回答我自己的问题,以便其他遇到相同问题的人可以看到它是如何为我解决的。这是一个表单帖子还是请求中的数据body@Shantanu我不完全确定这意味着什么以及如何回答这个问题。那么,当你点击下一页时,你会得到任何值吗?@HastaTamang否。我相信我应该得到值,包括加载页面时以及更改页面中的某些内容时的值,如显示的行数或排序顺序。在我在问题中提到的示例项目中,当加载页面和更改页面中的某些内容时,我都会得到值。我的直觉告诉mi,我需要更改一些设置,以便在发出ajax请求时包含表单数据。我不知道会发生什么。您能验证视图是否在“网络”选项卡中向您的操作方法发出表单请求吗?还要检查您是否有任何控制台错误。您的url应该是/Demo/LoadData,而不是/MOF2/Demo/LoadData。@HastaTamang实际上应该是这样的:/Sjv3otbn3ix5n3g22vby4loc4/MOF2/Production/Nesting。/MOF2之前的随机字符串是存储在URL中的会话ID,而不是cookie。因为这是不可能预测的,所以我可以使用@Url.Action,它知道会话ID并包含它来生成完整的Url。