我能否将剃刀代码简化为几行?

8

我能简化这段Razor代码吗?

    <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")}
2个回答

24
你可以使用[DisplayFormat]属性来装饰你的视图模型属性:
[DisplayFormat(DataFormatString = "{0:D}", NullDisplayText = "pas disponible")]
public DateTime? PublicationDate { get; set; }

然后你的视图就变成了:

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

所以现在它被简化为一行精美的代码。


你失去了文化信息。这些信息可能应该放在其他地方。 - Serge Wautier

0

我假设你可以使用?:运算符来缩短它。但这是否是一个好主意是另一个问题。

而且,你可能不想使用new System.Globalization.CultureInfo("fr-FR")硬编码区域设置,而是使用变量或线程的当前区域设置。


我正在考虑使用当前的服务器文化。 - Junior Mayhé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接