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

MVC4中辅助器方法@Html.HiddenFor()值来源的问题
今天学习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}"。经过我实验和推测,怀疑是从提取出的路由片段值得到的,但具体是什么机制并不清楚。

麻烦大家帮忙解答一下。
------解决思路----------------------
试完了,是这样的。

看看这篇文章,感觉是相关的
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