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

ASP.NET MVC中如何通过POST请求传递值以隐藏URL参数?

解决隐藏URL参数并实现POST请求的问题

嘿,我来帮你搞定这个需求!你想要点击编辑按钮时不在URL里暴露参数,同时通过POST请求传递数据对吧?咱们先分析下现有代码的问题,再给出具体的修改方案。

问题分析

  1. @Html.ActionLink的问题:它默认生成的是GET请求,而GET请求的参数必然会显示在URL中,所以你得到http://localhost:57098/Home/Edit/1这种带参数的URL是正常的,但不符合你隐藏参数的要求。
  2. input按钮无效的原因:你之前的input按钮是提交到Index的POST方法,然后通过RedirectToAction跳转到Edit的GET方法——Redirect本质是发起新的GET请求,参数还是会被放到URL里,而且这个流程绕了一圈,完全没必要。

解决方案

要隐藏参数,核心是用POST请求把参数放在请求体里,而不是URL中。我们需要修改Controller和View两部分:

1. 修改Controller代码

保留原有的HttpGet版Edit方法(用于直接访问编辑页面的场景),新增一个HttpPost版的Edit方法来处理表单提交:

[Authorize]
[HttpGet]
public ActionResult Edit(string ogrn)
{
    var lpue = kz.LPUs.Where(x => x.C_OGRN.Contains(ogrn)).FirstOrDefault();
    return View(lpue);
}

// 新增POST版Edit方法
[Authorize]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(string ogrn)
{
    var lpue = kz.LPUs.Where(x => x.C_OGRN.Contains(ogrn)).FirstOrDefault();
    return View(lpue);
}

2. 修改View代码

把原来的ActionLink和input按钮替换成每行一个独立的POST表单,用隐藏字段传递参数:

@foreach (var item in Model)
{
    <tr>
        <td> @Html.DisplayFor(modelItem => item.M_NAMES) </td>
        <td> @Html.DisplayFor(modelItem => item.FAM_GV) </td>
        <td> @Html.DisplayFor(modelItem => item.TEL) </td>
        <td> @Html.DisplayFor(modelItem => item.FAX) </td>
        <td> @Html.DisplayFor(modelItem => item.E_MAIL) </td>
        <td>
            @using (Html.BeginForm("Edit", "Home", FormMethod.Post))
            {
                @Html.AntiForgeryToken() <!-- 防止跨站请求伪造,必须和Controller的特性对应 -->
                @Html.Hidden("ogrn", item.M_NAMES) <!-- 把参数藏在隐藏字段里,POST时传递 -->
                <button type="submit" class="btn btn-primary btn-large">Изменить</button>
            }
        </td>
    </tr>
}

为什么这样改?

  • 每个行的表单会以POST方式提交到Edit方法,参数ogrn会被放在请求体中,URL只会显示http://localhost:57098/Home/Edit,完全看不到参数。
  • @Html.AntiForgeryToken()是ASP.NET MVC的安全机制,和Controller里的[ValidateAntiForgeryToken]配合,能有效防止跨站请求伪造攻击。
  • 直接POST到Edit方法,省去了中间跳转到Index的步骤,流程更简洁高效。

内容的提问来源于stack exchange,提问作者Андрей Голубцов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:02