@ Html.ValueFor(x => x.PropertyName)和@ Model.PropertyName之间的区别是什么?
@Html.ValueFor(x=>x.PropertyName) @Model.PropertyName
看起来这两个Razor命令完全相同。 使用一个是否有任何特殊情况或好处?
ValueFor
将调用存在的模板以呈现属性具有的类型。 默认情况下,此模板可能与ToString()
一样简单,但您可以将任何内容定义为模板。
@Model.PropertyName
将简单地将值显示为字符串。
@Html.ValueFor(x => x.PropertyName)
在引擎盖下调用很多代码和reflection。
它允许您自定义值的显示方式,然后在整个站点中使用一致的格式。 例如,如果您的属性使用DisplayFormatAttribute
修饰。
@Model.PropertyName
直接获取属性的值,在其上调用ToString(),并且HTML转义结果。 不会发生其他格式化。
为了说明,您可能会看到:
[DisplayFormat(DataFormatString="{0:C}")] public decimal PropertyName = 1234.56; @Html.ValueFor(x => x.PropertyName) => "£1,234.56" @Model.PropertyName => "1234.56"