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

ASP.NET Core中如何将JS变量传递至控制器?

可行解决方案

方案一:通过隐藏表单字段传递(适合同步表单提交)

你目前用的是submit按钮,最直接的方式是在表单里新增一个隐藏字段,点击按钮时把获取到的id赋值给它,表单提交时就会自动把id传给控制器。

前端代码修改:

<!-- 在你的<form>标签内添加隐藏输入框 -->
<input type="hidden" id="hiddenId" name="itemId" />
<input class="btn_confirm" type="submit" id={i} onclick="id_click(this.id)" value="Delete" />

<script>
function id_click(clicked_id) {
    // 将点击的id赋值给隐藏字段
    document.getElementById('hiddenId').value = clicked_id;
}
</script>

控制器对应代码:

[HttpPost]
public IActionResult Delete(int itemId)
{
    // itemId即为前端传递的id,在此处理删除逻辑
    return RedirectToAction("Index");
}

方案二:AJAX异步提交(适合无刷新操作)

如果不想刷新页面,用AJAX异步提交更灵活。点击按钮时阻止表单默认提交行为,再把id通过请求体传给控制器。

前端代码:

<!-- 将按钮type改为button,避免默认表单提交 -->
<input class="btn_confirm" type="button" id={i} onclick="id_click(this.id)" value="Delete" />

<script>
async function id_click(clicked_id) {
    try {
        const response = await fetch('/Home/Delete', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                // 带上ASP.NET Core要求的防伪造令牌
                'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
            },
            body: JSON.stringify({ id: clicked_id })
        });

        if (response.ok) {
            alert('删除成功');
            // 可在此添加刷新列表等后续操作
        } else {
            alert('删除失败');
        }
    } catch (error) {
        console.error('请求出错:', error);
    }
}
</script>

控制器对应代码:

[HttpPost]
public IActionResult Delete([FromBody] DeleteRequest request)
{
    // request.Id即为前端传递的id,处理删除逻辑
    return Ok();
}

// 定义接收参数的模型类
public class DeleteRequest
{
    public int Id { get; set; }
}

方案三:通过路由参数传递

也可以把id拼在请求URL里,点击按钮时修改表单的action属性,再提交表单。

前端代码:

<form id="deleteForm" method="post" action="">
    <input class="btn_confirm" type="submit" id={i} onclick="id_click(this.id)" value="Delete" />
</form>

<script>
function id_click(clicked_id) {
    // 修改表单action,将id作为路由参数
    document.getElementById('deleteForm').action = `/Home/Delete/${clicked_id}`;
}
</script>

控制器对应代码:

[HttpPost("/Home/Delete/{id:int}")]
public IActionResult Delete(int id)
{
    // id即为前端传递的参数,处理删除逻辑
    return RedirectToAction("Index");
}

关键注意事项:

  • 用POST请求时,必须带上防伪造令牌(ASP.NET Core默认启用防跨站请求伪造保护),使用TagHelper的<form>标签会自动生成__RequestVerificationToken隐藏字段,AJAX请求需在headers中携带该值。
  • 确保前端传递的id类型与控制器接收的类型一致(如均为int或字符串),避免类型转换错误。

内容的提问来源于stack exchange,提问作者P.Dakov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:45:32