ASP.NET MVC / Linq-to-SQL classes: Can I get it to infer readable display names?
-
22-09-2019 - |
Question
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.]
Solution
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.
OTHER TIPS
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.
There is a solution available for your requirements contained within the answer to this question. Asp.Net MVC 2 LabelFor Custom Text.