2

If I have a table Orders with fields CustomerID, OrderID and OrderDate, then the "Linq-to-SQL classes" generated class will be called Orders, with members called CustomerID, OrderID and OrderDate. So far so good.

However, if I then do Html.LabelFor(m => m.OrderDate) then the generated text will be "OrderDate" instead of "Order Date".

I tried using Order_Date as the field name, but that didn't work. Is there any way to get it to infer a better display name?

[I know that I can use data annotations to specify the display name explicitly, but I really don't want to do that for all my classes/members - I just want it to work by convention.]

John Farrell
  • 24,673
  • 10
  • 77
  • 110
Gary McGill
  • 26,400
  • 25
  • 118
  • 202

3 Answers3

2

I suggest you create your own HTML Helper for this, something like Html.MyLabelFor.

The rules to apply from here are up to you. You can simply split the word by case.

bruno conde
  • 47,767
  • 15
  • 98
  • 117
2

There is a solution available for your requirements contained within the answer to this question. Asp.Net MVC 2 LabelFor Custom Text.

Community
  • 1
  • 1
Nicholas Murray
  • 13,305
  • 14
  • 65
  • 84
1

This method takes advantage of existing MVC 2 architecture to place conventions over the entire *For rendering methods instead of one off HTML helpers and without having to re-label everything with spaced property names.

How to "DRY up" C# attributes in Models and ViewModels?

Essentially what your doing is overriding the default ConventionModelMetadataProvider behavior of MVC 2 and providing hooks for you to insert your own opinionated conventions.

Community
  • 1
  • 1
John Farrell
  • 24,673
  • 10
  • 77
  • 110
  • @jfar: I was really hoping for something out-of-the-box, but this is the next best thing since at least it follows the extensibility path (and is preferable to doing a complete re-implementation of *For). – Gary McGill Mar 29 '10 at 21:56