2016-10-20 5 views
0

У меня есть дата, которая отображается на моем View, которая показывает последнюю дату входа пользователя в систему. Возможно, они никогда этого не делали. Поэтому он передается как nullable DateTime.Обработка логики и констант в представлении

На пользовательском интерфейсе, я показываю это так:

<td>@(u.LastVisit != null ? u.LastVisit.Value.ToString("dd-MMM-yyyy") : "Not yet")</td> 

Но у меня есть несколько проблем с этим и думаю, что это может быть плохой практикой.

Во-первых, вид теперь имеет логику. (Если значение null, покажите «Not Yet», укажите дату). Вид также определяет формат даты. Этот формат уже сохраняется как константа в файле Constants, доступном из моего контроллера. И текст «Не все же», вероятно, должен быть постоянным.

Единственный способ, которым я могу видеть вокруг этого, - вернуть строку в пользовательский интерфейс и переместить эту логику в контроллер. Но это правильный способ сделать это?

+0

Вы можете использовать атрибут [DisplayFormat] (https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute (v = vs.110) .aspx) и установить ' DataFormatString' и 'NullDisplayText', а в представлении используйте' @ Html.DisplayFor (m => m.LastVisit) ' –

+0

DisplayFor берет модель, я думаю? Я нахожусь в «foreach», из свойства List <> на моей модели. Таким образом, у меня есть сущность (u, в данном случае, которая является пользователем в списке .Я не уверен, как я могу использовать этот элемент User в DisplayFor. Кажется, он хочет модель. – Craig

+1

Тогда ее просто 'DisplayFor (m => u.LastVisit) '(или' DisplayFor (m => m [i] .LastVisit) ', если его цикл' for') –

ответ

6

Вы можете применить атрибут [DisplayFormat] к свойству и установить свойство DataFormatString и NullDisplayText, например

[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", NullDisplayText = "Not yet")] 
public DateTime? LastVisit { get; set; } 

Если вы уже определили некоторые константы для формата, то вы можете использовать (например) DataFormatString = yourAssembly.Constants.DateFormat где DateFormat определяется как

public const string DateFormat = "{0:dd-MMM-yyyy}"; 

и с точки зрения использования DisplayFor()

@foreach(var u in Model) 
{ 
    @Html.DisplayFor(m => u.LastVisit) 
} 
Смежные вопросы