我正在使用一个表进行ASP.NET Core项目开发,该表具有基于它们所在的当前选项卡的筛选器。我最初的想法是使用JSON调用C#并获取表中合格项目的列表。
我想到的下一个计划可能是获取所有合格项目的列表,然后在for循环中使用过滤器?
public JsonResult OnGetGetSetups(string condition,int vehID)
{
if (vehID == 0)
return null;
switch (condition)
{
case "Dirt":
return new JsonResult(_context.Setups.Include(d => d.Driver).Include(sd => sd.SetupDetails).Include(c => c.SetupDetails.Condition).Where(a => a.SetupDetails.Condition.Name == condition && a.VehicleId == vehID).ToList());
case "Carpet":
return new JsonResult(_context.Setups.Include(d => d.Driver).Include(sd => sd.SetupDetails).Include(c => c.SetupDetails.Condition).Where(a => a.SetupDetails.Condition.Name == condition && a.VehicleId == vehID).ToList());
default:
List<Setup> tmp = _context.Setups.Include(d => d.Driver).Include(sd => sd.SetupDetails).Include(c => c.SetupDetails.Condition).Where(a => a.VehicleId == vehID).ToList();
return new JsonResult(tmp);
}
}
然后我有3个事件监听器,称为“ GetSetups”。这似乎是解决此问题的非常混乱的方法。有更好的方法来解决这个问题吗?
类似的东西:
$(function () {
$("#allSetups").on("click", function () {
if (activeTab == "allSetups") {
return;
}
activeTab = "allSetups";
$("#infoArea").empty();
var vehId = document.getElementById('vehicleId').value;
var url2 = '@Url.Page("/setups/search","GetSetups")';
$.getJSON(url2, { condition: "all", vehID: vehId }, (data) => {
$.each(data, function (i, item) {
$("#vehcileId").append(`<option value="${item.vehicleId}">${item.name}</option>`);
});
});
});
});
答案 0 :(得分:0)
您可以尝试这种方式:
public JsonResult OnGetGetSetups(string condition, int vehID)
{
if (vehID == 0)
return null;
return new JsonResult(_context.Setups.Include(d => d.Driver)
.Include(sd => sd.SetupDetails)
.Include(c => c.SetupDetails.Condition)
.Where(a => a.VehicleId == vehID
&& ((condition != "Dirt" && condition != "Carpet") || a.SetupDetails.Condition.Name == condition))
.ToList());
}