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

ASP.NET Core MVC中如何通过jQuery隐藏链接中的Id参数?

如何隐藏跳转URL中的Id参数

嘿,我来帮你搞定这个问题~你现在用的是GET请求跳转页面,所以Id参数会直接暴露在URL里。要完全隐藏它,或者优化URL显示,这里有几个实用的方案:

方案1:用表单POST提交(完全隐藏参数)

POST请求的参数不会出现在URL里,我们可以通过动态创建表单的方式实现跳转:

前端脚本修改

<script>
$(document).on('click', '.btndetail', function () {
    var id = $(this).data("id");
    
    // 动态创建一个POST表单
    const form = $('<form>', {
        method: 'POST',
        action: '/Schools/SchoolDetails'
    });
    
    // 添加隐藏的Id字段
    form.append($('<input>', {
        type: 'hidden',
        name: 'Id',
        value: id
    }));
    
    // 必须添加ASP.NET Core的防伪造令牌,避免跨站请求伪造错误
    form.append($('<input>', {
        type: 'hidden',
        name: '__RequestVerificationToken',
        value: $('input[name="__RequestVerificationToken"]').val()
    }));
    
    // 提交表单实现跳转
    form.appendTo('body').submit();
});
</script>

控制器代码修改

把原来的[HttpGet]改成[HttpPost],如果需要后续在视图或其他逻辑中使用Id,可以存入TempData:

[HttpPost]
public IActionResult SchoolDetails(string Id)
{
    // 把Id存入TempData,方便后续页面使用(可选,根据你的业务需求)
    TempData["SchoolId"] = Id;
    
    return View();
}

方案2:用TempData/Session预存Id(适合需要GET跳转的场景)

如果必须用GET跳转页面,可以先通过AJAX把Id存入服务器的TempData,再跳转:

前端脚本

<script>
$(document).on('click', '.btndetail', function () {
    var id = $(this).data("id");
    
    // 先POST请求把Id存入服务器
    $.post('/Schools/StoreSchoolId', { 
        Id: id, 
        __RequestVerificationToken: $('input[name="__RequestVerificationToken"]').val() 
    }, function() {
        // 存储成功后跳转到详情页
        window.location.href = "/Schools/SchoolDetails";
    });
});
</script>

控制器新增存储方法

[HttpPost]
public IActionResult StoreSchoolId(string Id)
{
    TempData["SchoolId"] = Id;
    return Ok();
}

修改原详情页方法

改回[HttpGet],从TempData中取出Id:

[HttpGet]
public IActionResult SchoolDetails()
{
    var schoolId = TempData["SchoolId"] as string;
    // 这里处理你的业务逻辑
    return View();
}

注意:TempData的数据只在下次请求有效,刷新页面后会丢失;如果需要持久化,可以改用Session(需要提前配置Session)。

方案3:优化路由参数(美化URL,仍可见Id但无参数名)

如果只是不想看到Id=1234这种参数形式,可以配置路由让URL变成/Schools/SchoolDetails/1234:

配置路由

在你的Program.cs(或Startup.cs)中添加自定义路由:

app.MapControllerRoute(
    name: "schoolDetails",
    pattern: "Schools/SchoolDetails/{Id}",
    defaults: new { controller = "Schools", action = "SchoolDetails" }
);

修改前端脚本

<script>
$(document).on('click', '.btndetail', function () {
    var id = $(this).data("id");
    var url = "/Schools/SchoolDetails/" + id;
    window.location.href = url;
});
</script>

控制器代码保持不变

[HttpGet]
public IActionResult SchoolDetails(string Id)
{
    return View();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:03:15