MVC4中辅助器方法@Html.HiddenFor()值来源的问题

watermoonlx 2015-10-06 08:57:37
今天学习MVC4辅助器方法遇到一个问题,百思不得其解,请教一下大家。

1.建立一个TestType模型类,有一个Id属性。

2.建立一个动作方法

public ActionResult Edit(int id)
{
TestType model = null;

return View(model);
}


3.建立一个对应的强类型视图,使用Razor引擎,并利用HiddenFor方法生成Id的隐藏字段

@model TestType
......
<body>
@using (Html.BeginForm("Edit", "Question", FormMethod.Post))
{
<div>
@Html.HiddenFor(m => m.Id)
<div>
}
.......



4.以 http:.../Question/Edit/12 访问控制器,跳转到视图。此时传给视图的视图模型对象是一个空引用,应该没有属性值。但是生成的页面中,Id隐藏字段有值,value=12
            
<input data-val="true" data-val-number="字段 主键 必须是一个数字。" data-val-required="主键 字段是必需的。" id="Id" name="Id" type="hidden" value="12" />


请问这个value=12是从哪里来的呢?是怎样一个机制得到的?

特别说明:路由为默认路由,路由模式为"{controller}/{action}/{id}"。经过我实验和推测,怀疑是从提取出的路由片段值得到的,但具体是什么机制并不清楚。

麻烦大家帮忙解答一下。
...全文
1830 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
宝_爸 2015-10-07
  • 打赏
  • 举报
回复
试完了,是这样的。 看看这篇文章,感觉是相关的 http://www.hanselman.com/blog/TheWeeklySourceCode38ASPNETMVCBetaObscurityModelStateIsValidIsFalseBecauseModelBinderPullsValuesFromRouteData.aspx 我试了下,可以用下面的代码达到你的目的 [HttpGet] public ActionResult Edit(int id) { ModelState.Remove("id"); TestType model = new TestType() { id = id * 10, id1 = id * 10, title = "abc" }; return View(model); } 这个方案来自: http://stackoverflow.com/questions/15282577/why-is-my-textboxfor-using-my-route-data
宝_爸 2015-10-07
  • 打赏
  • 举报
回复
试完了,是这样的。 这篇文章里的
宝_爸 2015-10-07
  • 打赏
  • 举报
回复
我也去试一试。。。。。
watermoonlx 2015-10-07
  • 打赏
  • 举报
回复
认真看了您给的资料,基本搞清楚了问题所在。非常感谢您的回答!
watermoonlx 2015-10-06
  • 打赏
  • 举报
回复
可是传入视图的对象是null,本身没有值啊。
本拉灯 2015-10-06
  • 打赏
  • 举报
回复
TestType 这个对象来的

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧