2017-01-16 10 views
0

MVC Core Viewでは、空でない場合は作成日ではなく修正日を表示しようとしています。MVC Razor View - 空でない場合は、作成日の代わりに変更日を表示します。

だから、私は次のよう

@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 

だから、その代わりに、私は次のようにそれを変更し、それが動作することを言ってエラーを得ました。

ただし、モデル宣言で既に行った日付の書式を再指定する必要があるという問題があります。そうでない場合は、DisplayForをもう使用しないため、データはdd/MM/yyyy HH:mm:ss形式で表示されます。

もう1つの可能性は、ViewModelを使用して、この種の特殊テキストを処理するための新しいプロパティを追加できることです。

このようなシナリオを処理するより良い方法があるかどうか分かりますか?

+1

をフォーマットすることができます。 –

+0

ビューモデルは常にベストですが、常に@if(item.DateModified.HasValue){@ Html.DisplayFor(m => item.DateModified)} else {@ Html.DisplayFor(m => item.DateCreated )} ' –

+0

ビューにロジックを置くのではなく、モデルでヘルパープロパティを使用する方が良いでしょう。 – 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属性も同様に飾る必要があります –

関連する問題