21
@Html.ValueFor(x=>x.PropertyName) 
@Model.PropertyName

It seems like these two Razor commands do the exact same thing. Is there any special circumstance or benefit of using one over the other?

Buffalo
  • 734
  • 1
  • 10
  • 21

2 Answers2

33

@Html.ValueFor(x => x.PropertyName) invokes a lot a code and reflection under the hood.
It will allow you to customize the way the value is presented, and then have a consistent format across your whole site. For example, if your property is decorated with DisplayFormatAttribute.

@Model.PropertyName is literally getting the value of the property directly, calling ToString() on it, and HTML escaping the result. No other formatting will take place.

 

To illustrate, you might see this:

[DisplayFormat(DataFormatString="{0:C}")]
public decimal PropertyName = 1234.56;

@Html.ValueFor(x => x.PropertyName)  =>  "£1,234.56"
@Model.PropertyName                  =>  "1234.56"
Buh Buh
  • 7,443
  • 1
  • 34
  • 61
21

ValueFor will invoke the template that exists for rendering the type that the property has. By default this template may be as simple as ToString(), but you can define anything as the template.

@Model.PropertyName will simply present the value as string.

GSerg
  • 76,472
  • 17
  • 159
  • 346
  • From the [documentation](http://msdn.microsoft.com/en-us/library/system.web.mvc.html.valueextensions.valuefor(v=vs.108).aspx) for `ValueFor` : "Provides a mechanism to create custom HTML markup compatible with the ASP.NET MVC model binders and templates." – dom May 24 '13 at 15:09