You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中如何通过AJAX按日期筛选更新DataTable的下载量数据

实现步骤

1. 修正后端接口问题

你当前的后端接口存在几处需要调整的问题:参数不能直接传入FileModel、counter变量定义位置错误、缺少返回值,修正后代码如下:

public JsonResult NumberDownloads(DateTime dateFrom, DateTime dateTo, int fileId)
{
    int counter = 0;
    // 通过文件ID匹配对应统计数据
    var stats = context.Statistic.Where(x => x.File.Id == fileId).ToList();
    foreach(var item in stats)
    {
        int compareFrom = DateTime.Compare(item.DownloadDate, dateFrom);
        int compareTo = DateTime.Compare(item.DownloadDate, dateTo);
        // 大于等于起始时间且小于等于结束时间即符合要求,无需单独判断等于场景
        if (compareFrom >= 0 && compareTo <= 0)
        {
            counter += item.DownloadCounter;
        }
    }
    return Json(counter);
}

2. 修正前端页面错误并添加标识

首先修复DateTo输入框的属性错误,同时给下载量单元格添加自定义属性存储文件ID和原始总下载量,方便后续JS操作:

日期选择框修正

<div class="form-group row ">
    <label asp-for="DateFrom" class="col-sm-2 col-form-label"></label>
    <div class="col-sm-10">
        <input type="date" id="datefrom" asp-for="DateFrom" class="form-control" placeholder="DateFrom" />
        </div>
</div>
<div class="form-group row ">
  <label asp-for="DateTo" class="col-sm-2 col-form-label"></label>
    <div class="col-sm-10">
        <!-- 修复原有asp-for属性写错的问题,添加id方便JS取值 -->
        <input type="date" id="dateto" asp-for="DateTo" class="form-control" placeholder="DateTo" />
    </div>
</div>

表格下载量单元格修改

将原有下载量单元格:

<td>@file.DownloadCounter</td>

替换为:

<td data-file-id="@file.Id" data-origin-download="@file.DownloadCounter">@file.DownloadCounter</td>

3. 添加JS逻辑实现动态更新

在页面底部添加以下JS代码,监听日期选择框的变化,满足条件时自动调用接口替换下载量:

// 绑定两个日期框的变动事件
document.getElementById('datefrom').addEventListener('change', updateDownloadCount);
document.getElementById('dateto').addEventListener('change', updateDownloadCount);

function updateDownloadCount() {
    const dateFrom = document.getElementById('datefrom').value;
    const dateTo = document.getElementById('dateto').value;
    // 任意一个日期为空时,还原为原始总下载量
    if (!dateFrom || !dateTo) {
        document.querySelectorAll('td[data-file-id]').forEach(td => {
            td.textContent = td.dataset.originDownload;
        });
        return;
    }
    // 两个日期都不为空时,遍历所有文件行调用接口获取时间段内下载量
    document.querySelectorAll('td[data-file-id]').forEach(async td => {
        const fileId = td.dataset.fileId;
        try {
            // 请将路径中的「你的控制器名」替换为接口实际所在的控制器名称
            const res = await fetch(`/你的控制器名/NumberDownloads?dateFrom=${dateFrom}&dateTo=${dateTo}&fileId=${fileId}`);
            const periodCount = await res.json();
            td.textContent = periodCount;
        } catch (err) {
            console.error('获取周期下载量失败', err);
            td.textContent = td.dataset.originDownload;
        }
    });
}

内容的提问来源于stack exchange,提问作者viktorrr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:36:05