我的View
上显示的日期显示用户登录的最后日期。他们可能从未这样做过。所以它作为nullable DateTime
传递。
在用户界面上,我显示如下:
<td>@(u.LastVisit != null ? u.LastVisit.Value.ToString("dd-MMM-yyyy") : "Not yet")</td>
但我对此有一些问题,并认为这可能是不好的做法。
首先,视图现在有逻辑。 (如果为null,则显示&#34; Not Yet&#34;,否则显示日期)。视图还指示日期格式。该格式已作为常量存储在Constants文件中,可从我的控制器访问。文字&#34; Not Yet&#34;也应该是一个常数。
我能看到的唯一方法是将一个String返回给UI,并将该逻辑移动到控制器。但这是正确的方法吗?
答案 0 :(得分: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)
}