处理视图中的逻辑和常量

时间:2016-10-20 00:39:32

标签: c# asp.net-mvc

我的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,并将该逻辑移动到控制器。但这是正确的方法吗?

1 个答案:

答案 0 :(得分:6)

您可以将[DisplayFormat]属性应用于该媒体资源,并设置DataFormatStringNullDisplayText属性,例如

[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)
}