Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 没有数据从表单发送到操作_C#_Ajax_Asp.net Mvc_Datatables - Fatal编程技术网

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

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

我正在ASP.NET MVC应用程序中使用DataTables.js。我想在一个操作中处理服务器上的事情,但似乎没有数据从视图中的表单发送到该操作。我已经构建了一些代码来测试这个示例:

我有一个简单的看法:

<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。