Вам не нужно атрибут сделать это можно сделать с помощью комбинации DisplayTemplate и библиотеки Humanizer.
Под вашей папкой Views/Shared
добавьте новую папку под названием DisplayTemplates
. Внутри создайте новый частичный вид - я предлагаю вам назвать его в соответствии с типом, который он отобразит, например. DateTime.cshtml.
В частичном, установите атрибут model
на тип, который вы хотите отобразить, например.
@model DateTime
Затем добавьте разметку, чтобы показать значение, например.
<div class="display-label">@Html.LabelForModel()</div>
<div type="DateTime" class="display-field">@Model.ToString("dd/MM/yyyy HH:mm:ss")</div>
Чтобы использовать парциальное из родительского вида, вы просто используете Html.DisplayFor
, а инфраструктура MVC делает проводку для вас между типами, так что типы, которые имеют обычай DisplayTemplate использовать его и все остальное использует по умолчанию шаблоны.
Чтобы получить метку поля DateStamp
в виде Date Stamp
, у вас есть возможность использовать атрибут DisplayName
(из System.ComponentModel), например.
public class UserViewModel
[DisplayName("Date Stamp")
public DateTime DateStamp
...
Но более сложный подход заключается в проверке модели являются обязательными против и тянуть имя свойства из метаданных, который использует MVC. Это происходит от имущества ViewData.ModelMetadata.PropertyName
, которое получает нас DateStamp
. Затем мы можем ввести Humanizer, который имеет метод расширения Humanize для строк, которые будут разделять строки PascalCased на отдельные слова, давая нам Date Stamp
.
<div class="display-label">@Html.ViewData.ModelMetadata.PropertyName.Humanize(LetterCasing.Title)</div>
Будет ли это работать и с @ Html.DisplayForModel? – Tomas
Да, я добавлю обновление для того, что вам нужно сделать для этого. – hutchonoid