我遇到了一个问题,我期望 Html.HiddenFor 从我的模型中解析 id,并发现 ModelStateCollection 是由查询参数、发布数据以及您的模型构成的(如此处所述https://stackoverflow.com/ a/8749419/910348)。
但我不明白为什么 Html.DisplayFor 的解析方式与 HiddenFor 不同。这是我的代码:
// Model
public class FooModel
{
public int id { get; set; }
}
// Controller
public ActionResult Foo(int id)
{
var model = new FooModel { id = 111 };
return View(model);
}
// Form
@model MVCProject.Models.FooModel
@using (Html.BeginForm())
{
<fieldset>
<legend>FooModel</legend>
@Html.HiddenFor(model => model.id)
<p>ID: @Html.DisplayFor(model => model.id)</p>
<p><input type="submit" value="Save" /></p>
</fieldset>
}
请求 /Home/Foo/999 的结果 HTML:
<input data-val="true" data-val-number="The field id must be a number."
data-val-required="The id field is required." id="id" name="id"
type="hidden" value="999" />
<p>ID: 111</p>
这是 HiddenFor 和 DisplayFor 将其 lambda 表达式解析为不同值的预期行为吗?为什么?