3

私はasp.net mvc3の初心者です。asp.net mvc3 で使用されている規則により、単一のコードを変更するのは非常に混乱し、困難です。Edit.cshtmlで問題なく、 datepickerを使用して日付を選択し、値を日付のみのデータベースに保存します。しかし、 DateTime ではなく Dateのデータ型の BirthDate 列があり、 Details.cshtml@Html.DisplayFor(model => model.BirthDate);で使用すると日付と時刻の両方が表示されます。Googleで検索しているときに、希望の形式で日付を表示するための次のコードを見つけて実装しました:

@Model.BirthDate.ToString("dd MMM YYYY");

@Html.DisplayFor(model => model.BirthDate.ToString("dd MMM YYYY"));

オーバーロードメソッドが引数を1つとらないというエラーが発生します。さらに、次のように使用できます。

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
pubilc DateTime BirthDate { get; set }

それ以来、Entity Framework ではモデル ファーストのアプローチを使用してきました。上記の DisplayFormat プロパティを実装する必要がある場所、またはシナリオの Details.csthml で日付を正しい方法で表示するためのカミソリ構文である可能性があるもの

4

4 に答える 4

1

わかりました、8 か月前に投稿された質問に返信していることはわかっていますが、私の唯一の意図は、これが将来この質問を参照する他の人に役立つかもしれないということです。
私は MVC にも反対であり、時間ではなく日付のみを表示する必要があるという同様の問題にも直面し、次のことがうまくいきました。

の代わりに@Html.DisplayFor()<span>
したがって、問題で言及されているケースでは、次のようになります。

<span>@String.Format("{0:D}", model.BirthDate)</span>

Output: Sunday, September 05, 1999 

いいえ、フォーマット用にクラス/ファイルを追加する必要があります。

于 2013-03-08T10:54:33.333 に答える
0

私によると、3番目のアプローチが最善の方法です。

  1. プレゼンテーションモデルはUIのすべての側面を処理しており、特にプロパティを再利用する場合、ビューに不要で冗長なフォーマットコードはありません。
  2. ユニットテストを可能にします
  3. モデルを再利用する場合、異なるページ間で一貫性があります。

日付をフォーマットし、これをすべてのプレゼンテーション/ビューモデルで一貫して使用するヘルパーメソッドを作成することもできます。

public string FormattedDate(this DateTime dateTime)
{
  return dateTime.ToString("dd MMM YYYY");
}
于 2012-06-23T05:46:24.933 に答える
0

私は、この種のものを処理するために一種のデコレータパターンを使用するのが好きです。モデルクラスがMyModelと呼ばれるとしましょう。次に、次のようにラッパー クラスを定義します。

public class MyModelDecorator 
{
    public MyModel BaseItem { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
    public DateTime BirthDate { get; set; }

    public MyModelDecorator(MyModel baseItem)
    {
        BaseItem = baseItem;
    }
}

次に、ビューで、基本モデルのプロパティまたは装飾されたプロパティのいずれかを参照できます。

@Html.DisplayFor(m => m.BirthDate)
@Html.DisplayFor(m => m.BaseItem.SomeOtherProperty)

これよりも良い解決策があれば、私は本当にそれを聞きたいです....

于 2012-06-23T05:52:43.580 に答える