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

如何将a标签中的name.report值不通过URL传递给控制器

视图代码改造

先给每个菜单元素新增自定义属性存储需要传递的Report值,避免写死在URL中:

@foreach (var name in Model.namesReport)
{
    <li class="">
        <a class="menu_name" data-report="@name.Report">@name.ReportName</a>
    </li>
}

方案1:AJAX POST传参(无页面刷新场景适用)

适合点击菜单后仅局部加载报表内容的场景,参数放在请求体中,不会出现在URL:

前端JS代码

document.querySelectorAll('.menu_name').forEach(menu => {
    menu.addEventListener('click', function () {
        // 取自定义属性存储的Report值
        const reportVal = this.dataset.report;
        // 发起POST请求到对应控制器接口
        fetch('/[你的控制器名称]/[你的Action名称]', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
            },
            body: JSON.stringify({ report: reportVal })
        }).then(res => res.json())
        .then(result => {
            // 处理接口返回结果,比如渲染报表内容
        })
    })
})

控制器代码

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult GetReport([FromBody] string report)
{
    // 此处编写业务逻辑处理report参数
    return Json(你的返回结果);
}

方案2:隐藏表单POST提交(页面跳转场景适用)

适合点击菜单后需要跳转到新页面展示报表的场景,参数完全通过请求体传递,无URL暴露风险:

新增隐藏表单

在当前视图任意位置添加全局隐藏表单:

<form id="reportPostForm" method="post" action="/[你的控制器名称]/[你的Action名称]" style="display: none;">
    <input type="hidden" id="reportParam" name="report" />
    @Html.AntiForgeryToken()
</form>

前端JS代码

document.querySelectorAll('.menu_name').forEach(menu => {
    menu.addEventListener('click', function () {
        const reportVal = this.dataset.report;
        document.getElementById('reportParam').value = reportVal;
        // 提交表单实现跳转
        document.getElementById('reportPostForm').submit();
    })
})

控制器代码

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult ShowReport(string report)
{
    // 此处编写业务逻辑处理report参数
    return View();
}

注意事项

  • 两种方案均不会将report参数暴露在URL中,符合需求
  • 如果项目引入了jQuery,可以将上述原生JS代码替换为jQuery实现,逻辑完全一致
  • 若你的控制器未开启防伪校验,可以去掉代码中对应的防伪token相关配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:27:06