SMC*_*SMC 4 asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4
当我们使用下面的方法将表单发布到Action Method时,我们可以在Parameter中看到View Model值.
@Html.EditorFor(model => model.Foo)
Run Code Online (Sandbox Code Playgroud)
当我们使用下面的方法将表单发布到Action Method时,我们无法在Parameter中看到View Model值.
@Html.DisplayFor(model => model.Foo)
Run Code Online (Sandbox Code Playgroud)
所以,在后面的案例中,w可以隐藏字段.所以,我认为,DisplayFor当它出现在表格价值时,我们不应该这样做.
问题:为什么DisplayFor不将值发布到Action Method?我们可以讨论这个的内部机制吗?
ata*_*ati 12
因为DisplayFor不呈现属性的输入字段.这就是为什么它被称为DisplayFor,而不是EditorFor.它旨在用于向用户显示属性.
例如,假设您的模型中有一个名为Name的字符串属性,其值为"John".在这种情况下,以下是页面上该属性的呈现方式Html.EditorFor和Html.DisplayFor方式:
@Html.EditorFor(model => model.Name)
Run Code Online (Sandbox Code Playgroud)
这将呈现为:
<input name="Name" id="Name" type="text" value="John" />
Run Code Online (Sandbox Code Playgroud)
但,
@Html.DisplayFor(model => model.Name)
Run Code Online (Sandbox Code Playgroud)
将呈现为:
John
Run Code Online (Sandbox Code Playgroud)
顺便说一句,Html.HiddenFor将在页面上呈现一个隐藏字段,该字段将发布到您的Controller.通过上面的例子,
@Html.HiddenFor(model => model.Name)
Run Code Online (Sandbox Code Playgroud)
将呈现如下:
<input name="Name" id="Name" type="hidden" value="John" />
Run Code Online (Sandbox Code Playgroud)
您EditorFor希望用户在页面中输入数据时使用,当您希望向用户DisplayFor显示只读数据时使用,以及HiddenFor在提交表单时将数据发布到Controller时使用,但数据使用不应由用户编辑和显示.一个例子是用户未编辑的ID字段,但您需要在表单中使用它.
看看这篇文章:什么是@ Html.DisplayFor语法?
看到html渲染.没有属性name.或不是输入标签.表单标记仅发送input, select, textarea,...具有该属性的标记元素name.例如:
<form...>
<input id="lastname" name="lastname" />
</form>
Run Code Online (Sandbox Code Playgroud)
不是这个:
<form...>
<input id="lastname" />
</form>
Run Code Online (Sandbox Code Playgroud)
