【问题标题】:DataTable can not pass parameters from Ajax to ASP.NET MVC controllerDataTable 无法将参数从 Ajax 传递到 ASP.NET MVC 控制器
【发布时间】:2021-12-05 10:22:20
【问题描述】:

我在尝试使用 Ajax 将字符串参数从 DataTable 传递到 ASP.NET MVC 控制器时遇到此问题:未发送参数。

我尝试了多种形式的“数据:”选项。请帮帮我,我想我遗漏了一些重要的东西。

当(作为测试)我用 ttt="CO" 初始化控制器开头的参数时,一切正常!

$('#tblVacation').DataTable({
    "ajax": {
        "url": '/Vacation/LoadData2',
        "contentType": "application/json;charset=utf-8",
        "type": 'GET',
         "dataType": 'JSON',
         "data" : ' { ttt: "CO" }'
         "dataSrc": "",
    },
  
    "columns": [
        { "data": "vacationId", width: "5%" },
        { "data": "operatorId", width: "3%" },
        { "data": "operator", width: "10%" },
        { "data": "type", width: "3%" },
    ]
});

控制器是:

[HttpGet]
public ActionResult LoadData2(string ttt)
    // ttt="CO";
{               
    List<Vacation> data = null;

    try
    {
        data = DB.Vacations.Include(x => x.Operator).ToList();

        var result = data.Select(x => new Vacation_VM
            {
                VacationId = x.VacationId,
                OperatorId = x.OperatorId,
                Vacation_doc = x.Vacation_doc,
                Operator = x.Operator.Name,
                Type = x.Type,                    
            }).Where(m => m.Type == ttt);

        return new JsonResult(result);
    }
    catch (Exception ex)
    {
        ViewBag.Message = ex.Message;
    }

    return new JsonResult(null);
}

我也试过

var entity = {  
        ttt: "CO"     
    }
var dataToSend = JSON.stringify(entity);

 "data": function () {
                return dataToSend;
            },

但它仍然无法正常工作。我以后需要传递多个参数。

非常感谢,如果有任何建议,我将不胜感激。

【问题讨论】:

  • 尝试直接添加到url
  • 您不需要对entity 进行字符串化。只需使用var dataToSend = { ttt: "CO" };,然后使用"data": function () { return dataToSend; }。使用data 选项的函数形式是正确的方法。因为您使用的是GET,所以您会看到ttt=CO 作为查询参数添加到请求URL。
  • 如果这不能按预期工作,那么您可以edit 您的问题并提供minimal reproducible example。向我们展示代码,提供一些示例测试数据,并解释您是如何触发后续 Ajax 调用的。
  • 最后它适用于这种形式: var dataToSend = { ttt: "CO" };然后 "data": function () { return dataToSend; }。非常感谢帮助我,经过三天的搜索,我很高兴!
  • 明确地说,如果您想为每个 new Ajax 调用向服务器发送 不同 数据,则需要这种方法(使用该函数) ,无需重新初始化数据表。如果您只想为每个 Ajax 调用发送ttt=CO,那么您可以使用@rahatur 提供的解决方案,或者只是将查询参数硬编码到URL 中。

标签: ajax asp.net-mvc datatable parameters


【解决方案1】:

将ajax调用部分替换为以下内容:

"ajax": {
    type: 'GET',
    url: '/Vacation/LoadData2',
    data: { ttt: "CO" },
    dataType: 'JSON',
    async: true,
    cache: false,
},

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多