Asp.net mvc MVC以不同于DisplayFor的方式处理HiddenFor的lambda
我遇到了一个问题,我希望Html.HiddenFor解析模型中的id,并发现ModelStateCollection是根据查询参数、post数据以及您的模型构建的(如本文所讨论的) 但我不明白的是,为什么Html.DisplayFor解析与HiddenFor解析不同。这是我的密码:Asp.net mvc MVC以不同于DisplayFor的方式处理HiddenFor的lambda,asp.net-mvc,Asp.net Mvc,我遇到了一个问题,我希望Html.HiddenFor解析模型中的id,并发现ModelStateCollection是根据查询参数、post数据以及您的模型构建的(如本文所讨论的) 但我不明白的是,为什么Html.DisplayFor解析与HiddenFor解析不同。这是我的密码: // Model public class FooModel { public int id { get; set; } } // Controller public ActionResult Foo(in
// 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>
}
//模型
公共类模型
{
公共int id{get;set;}
}
//控制器
公共行动结果Foo(int-id)
{
var模型=新模型{id=111};
返回视图(模型);
}
//形式
@模型MVCProject.Models.FooModel
@使用(Html.BeginForm())
{
食品模型
@Html.HiddenFor(model=>model.id)
ID:@Html.DisplayFor(model=>model.ID)
}
请求/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>
身份证号码:111
HiddenFor和DisplayFor是否会将其lambda表达式解析为不同的值?为什么?出现不同行为的原因是
HiddenFor
正在从ModelStateCollection
中提取。这是一个输入,因此,这是框架首先考虑的地方
DisplayFor
没有试图呈现任何类型的输入、选择、文本区域等。它只是输出值。因为它不是任何类型的输入,所以它不关心ModelStateCollection
如果您考虑普通web应用程序的流程,就会看到一个需要填充的表单。完成后,您将提交表单,然后进入一个全新的页面(具有全新状态),或者返回到当前页面进行更改或查看数据。在大多数情况下,显示用户在其请求中刚刚提交的数据是有意义的