在ASP.NET MVC(3)中格式化模型属性的最佳位置在哪里?

Ian*_*dge 14 asp.net-mvc asp.net-mvc-3

我最近一直在寻找ASP.NET MVC框架中的最佳实践,特别是关注的关注.我的问题是,如果我在模型上有属性,那么在该属性上进行某些格式化的最佳位置在哪里?

我想过几个选项,但不确定哪个是最好的.该示例使用DateTime.对不起,这有点长.

选项1: 在视图中:@Model.TheDate.String("{0:'blah'dd/MM/yyyy}") 我知道这不对,因为格式字符串不应该在这里(如果我想在整个应用程序中更改格式怎么办)

选项2: 视图中使用的扩展方法:@Model.TheDate.DisplayItNicePlease() 这种方式很有意义,因为视图正在选择用于格式化的扩展方法,而viewmodel只是将date属性公开给视图.不确定视图或视图模型是否应该负责格式化.

选项3: 在Html Helper方法中,例如,我应该在ASP.NET MVC 3中放置声明性HTML帮助器,以便您可以使用:

@Html.DisplayDateNice(Model.TheDate)
Run Code Online (Sandbox Code Playgroud)

选项4: 视图模型上的额外属性,以格式化它并返回一个字符串,例如:

public string TheDateStr
{
    get
    {
        return TheDate.DisplayItNicePlease();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在视图中你就拥有了

@Model.TheDateStr
Run Code Online (Sandbox Code Playgroud)

与选项3非常相似,只是它保持视图真实,非常简单 - 视图只是输出模型中的内容而不关心数据的格式.

选项5: DisplayFormat属性,例如:在视图模型上:

[DisplayFormat(DataFormatString = "{0:'blah'dd/MM/yyyy}")]
public DateTime TheDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后在视图上:

@Html.DisplayFor(m => m.TheDate)
Run Code Online (Sandbox Code Playgroud)

我喜欢这个,除了格式字符串不再使用,所以带上选项5 ......

选项6: 某种习惯,DisplayFormatAttribute例如NiceDateDisplayFormatAttribute.在我看来,这可能是最好的解决方案,如果您只想要一个简单的字符串格式化,那么效果很好.我认为如果你想要更复杂的东西会变得更复杂,例如显示相对时间(计算C#中的相对时间),在这种情况下,最好是在扩展方法/ html助手中.

可能还有其他方法我甚至都不知道......

Chr*_*den 3

如果经常使用此类型格式,请使用扩展助手来格式化类型,或者在模型中添加额外的属性以返回原始属性的格式化版本。