web-dev-qa-db-ja.com

ASP.Net MVC RazorはDateTimeプロパティから時間を削除します

Razorビューを使用してASP.Net MVC 3 Webアプリケーションを開発しています。私のRazorビューに渡され、反復されてレコードのリストを表示する次のViewModelがあります。

ViewModel

public class ViewModelLocumEmpList
{
    public IList<FormEmployment> LocumEmploymentList {get; set;}
}

ビュー

<table>
  <tr>
   <th>Employer</th>
   <th>Date</th>
   </tr>
    @foreach (var item in Model.LocumEmploymentList) {
      <tr>
        <td>@item.employerName</td>
        <td>@item.startDate</td>
      </tr>
      }
      </table>

私の問題は、ライン

@Html.DisplayFor(modelItem => item.startDate)

このような日付20/06/2012 00:00:00を返します。時刻を削除して日付を表示するだけです。つまり、 、20/06/2012

追加してみました

@Html.DisplayFor(modelItem => item.startDate.Value.ToShortDateString())

そして

DisplayFor(modelItem => item.startDate.HasValue ? item.startDate.Value.ToShortDateString(): "")

ただし、どちらも実行時に次のエラーメッセージを返します。

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

私はここでDarin Dimitrovの答えを見ました かみそりを使用してDateTime形式を変換する

ただし、ViewModelのstartDateプロパティにアクセスできません。ViewModelは、上記のFormEmploymentオブジェクトのIListを返します。

誰かが日時プロパティから時間を削除する方法について何かアイデアがあれば、私は非常に感謝しています。

ありがとう。

また、私のstartDateプロパティはNullableです。

更新

PinnyMの回答に基づいて、startDateプロパティに[DisplayFormat]属性を配置する部分クラス(以下を参照)を追加しました。

public partial class FormEmployment
{
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public Nullable<System.DateTime> startDate { get; set; }
}

ただし、私のRazorビューには、次のコードを使用して20/06/2012 00:00:00が引き続き表示されます

@Html.DisplayFor(modelItem => item.startDate)

何か案は?

ありがとう。

13
tcode

@item.startDate.Value.ToShortDateString()を使用できます(null値の適切な検証を追加)

29
pollirrata

モデルのstartDateプロパティでDisplayFormat属性を使用できます。

_[DisplayFormat(DataFormatString="{0:dd/MM/yyyy}")]
public DateTime? startDate { get; set; }
_

ただ使うDisplayFor(modelItem => item.startDate)

もう1つのオプションは、フォーマット専用の読み取り専用プロパティを作成することです。

_public String startDateFormatted { get { return String.Format("{0:dd/MM/yyyy}", startDate); } }
_

そしてDisplayFor(modelItem => item.startDateFormatted)を使用します

8
PinnyM