2017-01-16 39 views
0

在MVC核心視圖中,我試圖顯示修改日期而不是創建日期,如果它不爲空。MVC剃刀視圖 - 顯示修改日期而不是創建日期(如果它不爲空)

所以,我寫像下面

@Html.DisplayFor(modelItem => (item.DateModified.HasValue ? item.DateModified : item.DateCreated)) 

,但得到一個錯誤,指出

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions 

因此,而不是說我把它改成下面和它的作品。

@(item.DateModified.HasValue ? item.DateModified.Value.ToString("dd/MM/yyyy") : item.DateCreated.ToString("dd/MM/yyyy")) 

但是,問題是我必須重新指定我在模型聲明中已經完成的日期格式。如果不是,則顯示dd/MM/yyyy HH:mm:ss格式的數據,因爲我不再使用DisplayFor

另一種可能性是我可以使用ViewModel並添加一個新屬性來處理這種特殊文本。

我可以知道是否有更好的方法來處理這種情況?

+1

你所提出的建議是處理最好的辦法視圖模型可能性。 –

+0

視圖模型總是最好的,但你總是可以使用@if(item.DateModified.HasValue){@ Html.DisplayFor(m => item.DateModified)} else {@ Html.DisplayFor(m => item.DateCreated )}' –

+0

在模型中使用helper屬性似乎更好,而不是將邏輯放在View中。 – peval27

回答

1

您可以在視圖模型使用下面的幫助屬性,它會照顧你的問題,並格式化

//Considering your DateCreated is not nullable 

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] 
    public DateTime DisplayDate 
    { 
     get { return DateModified.HasValue ? DateModified.Value : DateCreated; } 
    } 
+0

我錯過了什麼嗎?它不會以正確的格式顯示,除非我將[DisplayFormat(DataFormatString =「{0:dd/MM/yyyy}」)] – TTCG

+0

是的,您還必須修飾DisplayFormat屬性 –

相關問題