2011-02-17 71 views
8

我可以减少这个剃须刀代码吗?我可以将剃须刀代码减少到几行吗?

<li> 
    @{ 
     if (@Model.PublicationDate.HasValue) { 
      @Model.PublicationDate.Value.ToString("D", new System.Globalization.CultureInfo("fr-FR")) 
     } 
     else { 
      @:"pas disponible" 
     } 
    } 
    </li> 

我想这一点,但它不工作:

@{(@Model.PublicationDate.HasValue) ? (@Model.PublicationDate.Value.ToString("D")) : (@:"pas disponible")} 

回答

24

您可以与[DisplayFormat]属性装饰你的视图模型属性:

[DisplayFormat(DataFormatString = "{0:D}", NullDisplayText = "pas disponible")] 
public DateTime? PublicationDate { get; set; } 

,然后你的看法变得简单:

<li> 
    @Html.DisplayFor(x => x.PublicationDate) 
</li> 

所以现在它被简化为一条优雅的线条。

+2

+1 - 我不知道这个属性!谢谢! – 2011-02-17 13:34:28

+0

我喜欢它,真的很聪明! – 2011-02-17 13:37:06

0

我假设你可以使用?: operator来缩短它。如果这是一个好主意是一个不同的问题。

而且您可能不想用new System.Globalization.CultureInfo("fr-FR")对区域设置进行硬编码,但可以使用线程的变量或当前语言环境的区域设置。