@ Html.ValueFor(x => x.PropertyName)和@ Model.PropertyName之间的区别是什么?

Buf*_*alo 19 c# asp.net asp.net-mvc razor asp.net-mvc-4

@Html.ValueFor(x=>x.PropertyName) 
@Model.PropertyName
Run Code Online (Sandbox Code Playgroud)

看起来这两个Razor命令完全相同.使用一个是否有任何特殊情况或好处?

Buh*_*ica 31

@Html.ValueFor(x => x.PropertyName)在引擎盖下调用很多代码和反射.
它允许您自定义值的显示方式,然后在整个站点中使用一致的格式.例如,如果您的房产装饰有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"
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的例子。谢谢你! (2认同)

GSe*_*erg 20

ValueFor将调用存在的模板以呈现属性具有的类型.默认情况下,此模板可能很简单ToString(),但您可以将任何内容定义为模板.

@Model.PropertyName 将简单地将值显示为字符串.