私はこれがかなり簡単なものだと思っていますが、グーグルではたくさんのことをしてしまいました。MVC 3では、フォーマットされた文字列をレンダリングするために@ Html.DisplayForを取得できません。
MVC 3のショッピングカートサイトで、コードファーストのEntity Frameworkを使用しています。私はオーバー送信していたモデルは、Productオブジェクトのリストであり、そしてそれらのオブジェクトのそれぞれは、このプロパティが含まれています
[Required(ErrorMessage = "This is a required field.")]
[DataType(DataType.Currency)]
[Range(1.00, 500.00, ErrorMessage = "Products can not be free.")]
[DisplayFormat(DataFormatString = "{0:C}")]
[DisplayName("Price")]
public double Price { get; set; }
私はdisplayFormatに属性として値をフォーマットするビューに以下の行を引き起こすだろうと期待していました通貨(商品はループ内の商品オブジェクトです):
@Html.DisplayFor(modelItem => item.Price)
しかし、これはフォーマットには全く適用されません。これまでのところ、私は仕事にそれを得ることができました唯一の方法ではなく、これを使用することです:
@String.Format("{0:C}", item.Price)
しかし、それが可能だ場合、ヌルのようなものを扱うように設計されていますように、私はむしろHtml.DisplayFor @使用したいです。私はそれが0以上になることを知っています。実際の検証では、常にいくらかの金額になるでしょう - しかし、私が続行する前にこれを行う正しい方法がないことを確認したいと思います。
これに関するすべての情報をお待ちしております。
UPDATE
ダーリンは答え、それは私が私が実際にビューにオーバー送信されたものの上に戻って発生する作業を、ないことを指摘しました。私はDisplayFormat属性を持つProductModelというクラスがありますが、実際には製品のリストを含む別のモデルを返していたことに気付きました。これはProductListModelと呼ばれ、ProductModelクラスではなくProductデータクラスのリストが返されたことに気付きました。
最終的には実際は非常に簡単でした。ちょうど私が半日もそれを浪費していなかったらいいのに。ダーリンに戻って正しくチェックするように感謝してくれてありがとう!
あなたは正しいです。それは一日遅く、実際に私が別のものを表示していたときに私が1つのことを表示していたと考えることの愚かな間違いをしていました!私は私のポストを更新します。それが動作することを証明してくれてありがとう! –
'[DataType(DataType.Currency)]'だけで十分です。 DisplayFormatは必要ありません –