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
相关产品推荐
相关产品推荐

