title: In MVC 3, I can't get @Html.DisplayFor to render a formatted string
body: <p>I'm hoping this is quite a simple one, although after lots of Googling, I've not been able to work it out.</p>
  
  <p>I'm working on a shopping cart site with MVC 3, and using code-first Entity Framework. The model I'm sending over is a list of Product objects, and each of those objects includes this property:</p>
  
  <pre><code>[Required(ErrorMessage = "This is a required field.")]
  [DataType(DataType.Currency)]
  [Range(1.00, 500.00, ErrorMessage = "Products can not be free.")]
  [DisplayFormat(DataFormatString = "{0:C}")]
  [DisplayName("Price")]
  public double Price { get; set; }
  </code></pre>
  
  <p>I was hoping that the DisplayFormat attribute would cause the following line in the view to format the value as a currency (item is the product object in the loop):</p>
  
  <pre><code>@Html.DisplayFor(modelItem =&gt; item.Price)
  </code></pre>
  
  <p>But this doesn't apply the formatting at all. So far the only way I've been able to get it to work is to use this instead:</p>
  
  <pre><code>@String.Format("{0:C}", item.Price)
  </code></pre>
  
  <p>But if it's possible, I'd rather use @Html.DisplayFor as it's designed to handle things like nulls. I know it's going to be 0 or more. In fact with the validation it'll always be some amount - but I want to make sure there isn't a more correct way of doing this before I carry on.</p>
  
  <p>Any information on this would be most appreciated!</p>
  
  <p><strong>UPDATE</strong></p>
  
  <p>Darin answered and pointed out that it does work, which caused me to go back over what I was actually sending over to the view. I realised that although I have a class called ProductModel, which has the DisplayFormat attribute, I was actually returning another model which contains a list of products. This is called ProductListModel and I realised that it returned a list of the Product data class - not the ProductModel class!</p>
  
  <p>So in the end it was actually very simple. Just wish I hadn't wasted half an evening on it. Thanks for inspiring me to go back and check properly, Darin!</p>