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

ASP.NET Core中View向Controller传递隐藏值失败求助

问题分析与解决

核心问题1:表单提交目标Action不匹配

你的View里Html.BeginForm指定的提交Action是PostTest,但Controller里接收的Action是TestId,两者名称不一致,导致表单提交后根本没进入你写的接收方法,自然拿不到值。

核心问题2:HiddenFor的Value优先级问题

Html.HiddenFor是强绑定Model属性的辅助方法,它会优先使用Model中id属性的值,而不是你手动设置的@Value参数。如果你的Model在返回View时id为空,手动设置的Value可能也不会生效(ASP.NET Core的模型绑定逻辑会忽略这种手动覆盖)。


修正方案

方案1:修正表单提交目标,改用Html.Hidden手动指定值

适合不需要强绑定Model,只想传递固定隐藏值的场景:

View代码:

@model ObjTest

@using (Html.BeginForm("TestId", "Test", FormMethod.Post))
{
    // 用Html.Hidden直接指定name和value,绕过Model绑定优先级问题
    @Html.Hidden("id", "123456789")
    <input type="submit" value="提交" />
}

Controller代码:

// 必须添加[HttpPost]特性,接收Post请求
[HttpPost]
public IActionResult TestId(ObjTest objTest)
{
    string result = objTest.id;
    Console.WriteLine(result); // 此时会输出123456789
    return View();
}

方案2:使用HiddenFor并正确绑定Model值

适合需要强绑定Model的场景,确保返回View时Model的id已赋值:

Controller的Get方法:

public IActionResult Index()
{
    // 返回View时给Model的id赋值
    var model = new ObjTest { id = "123456789" };
    return View(model);
}

View代码:

@model ObjTest

@using (Html.BeginForm("TestId", "Test", FormMethod.Post))
{
    // 直接使用HiddenFor,自动绑定Model的id值
    @Html.HiddenFor(model => model.id)
    <input type="submit" value="提交" />
}

Controller的Post方法:

[HttpPost]
public IActionResult TestId(ObjTest objTest)
{
    string result = objTest.id;
    Console.WriteLine(result); // 输出123456789
    return View();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:25:31