【问题标题】:JQuery datatables ajax sends the data but action method receives nullJQuery datatables ajax发送数据但操作方法接收null
【发布时间】:2020-11-18 06:02:39
【问题描述】:

我有一个在老式 ASP.Net MVC 项目中工作的 JQuery 数据表代码。但是我无法让它在 .Net Core 3.1 中工作。我尝试了几乎所有可能的方法,但在最好的情况下,我从 Ajax 请求的操作方法中获得了 null 输入。我在 Ajax post 方法中记录了数据,它在浏览器控制台中看起来是正确的。

这是我旧项目中有效的操作方法:

public ActionResult GetData()
{
string req = Request.Form[0].ToString();
...
}

这是我的旧项目 Datatables 中有效的 Ajax:

 "ajax": {
            "type": "POST",
            "url": url,
            "dataType": "json",
            "data": function (d) {
                d.searchParam = $('#srcParam').val();
                return JSON.stringify(d);
            }

我不知道 .Net Core 中的“Request.Form[0]”的等价物,它可以在没有输入参数的情况下捕获数据。在我的新项目中,我使用了相同的 Ajax,但我的操作总是得到空值方法的输入参数。我尝试了许多可能的修复方法,包括以下但没有任何效果:

-在我的操作方法中添加[HttpPost] 属性

-将contentType: "application/json"添加到我的ajax

-使用 ajax type: "GET" 代替。

-在 ajax data: { data: JSON.stringify(@Model.CityId) }, 中命名我的数据,并在我的操作方法中具有与“数据”相同的名称输入参数。

-在我的操作方法输入参数中添加[FromBody][FromForm] 属性。

-尝试在有和没有JSON.stringify的情况下发送数据

此时我迷路了,不知道如何获取这些数据。对于我当前项目中代码的参考当前状态如下:

动作方法

[HttpPost]
public JsonResult GetBusRouteList([FromBody]string data)
{
   string req = data;
}

阿贾克斯

"ajax": {
         "type": "POST",
         "url": url,
         "dataType": "json",
         "contentType": "application/json",
         "data" : { data: JSON.stringify(@Model.CityId) }
        }

【问题讨论】:

    标签: jquery ajax asp.net-core datatables asp.net-core-3.1


    【解决方案1】:

    您可以像这样更改数据表 ajax 和操作:

    行动:

    [HttpGet]
    public JsonResult GetBusRouteList(string data)
    {
       string req = data;
    }
    

    阿贾克斯:

    "ajax": {
             "url": url,
             "data" : { "data": '@Model.CityId' }
            }
    

    也可以参考link的例子

    更新: 替换 'Request.Form[0].ToString();'在 ASP .Net Core 中

    var dict = HttpContext.Request.Form.ToDictionary(x => x.Key, x => x.Value.ToString());
    

    【讨论】:

    • 我已经尝试过这种组合。我在浏览器控制台中收到此错误:“XML Parsing Error: no root element found”以及来自 Datatables 的此错误:datatables.net/tn/7 表示“服务器响应的不是 2xx 状态代码”。在这种情况下,我的请求没有命中操作方法。
    • 你可以试试var dict = HttpContext.Request.Form.ToDictionary(x => x.Key, x => x.Value.ToString());替换Request.Formxxx;
    • 工作就像一个魅力!非常感谢依依优。一段时间以来,我一直在互联网上寻找这个 Request.Form 的东西,但找不到它。我将此标记为我的问题的答案。谢谢。
    【解决方案2】:

    如下更改您的代码:

    动作方法:

    [HttpPost]
    public JsonResult GetBusRouteList([FromBody]int data)
    {
       string req = data.ToString();
    }
    

    阿贾克斯:

    "ajax": {
         "type": "POST",
         "url": url,
         "dataType": "json",
         "contentType": "application/json",
         "data" : JSON.stringify(@Model.CityId),
        }
    

    【讨论】:

    • 这个不发送@Model.CityId。所以我将输入设为 0。即使它确实如此,我如何访问其他与 Datatables 相关的参数,如绘制、长度、顺序和开始? .Net Core 中实际上是否有等效的 Request.Forms[0] ?如果我有这样的选择,那么我的问题应该得到解决。我尝试了 Request.Forms("formName") 的事情,但没有奏效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2015-11-06
    • 2013-07-18
    相关资源
    最近更新 更多