【发布时间】: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