2011-08-03 10 views
0

を働いていない:displayFormatにDataannotationは、私は私のモデルクラスでdataannotation次いる

[Required(ErrorMessage = "Required")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime DateOfBirth { get; set; } 

を、私は私の見解では、以下を使用する場合、私は検証エラーを取得いけない:

<tr> 
     <td>@Html.LabelFor(x => x.DateOfBirth, new { @class = "lbl" }, "Date Of Birth") </td> 
     <td>@Html.TextBoxFor(x => x.DateOfBirth, new { @class = "w100 _dob" }) 
     <br>@Html.ValidationMessageFor(x => x.DateOfBirth) 
     </td> 

</tr> 

あなたが提案してくださいすることができ解決策? LabelForあなたはCSSを設定することを可能にする過負荷を持っていない

答えて

4

DisplayFormat属性は、検証とは何の関係もありません。これは、ビューに表示されたときに値をフォーマットするためにのみ使用されます。対応する入力フィールドにユーザーが入力した値を検証する場合は、カスタムモデルバインダーを作成する必要があります。

<tr> 
    <td> 
     @Html.LabelFor(x => x.DateOfBirth, "Date Of Birth") 
    </td> 
    <td> 
     @Html.EditorFor(x => x.DateOfBirth) 
     <br/> 
     @Html.ValidationMessageFor(x => x.DateOfBirth) 
    </td> 
</tr> 
+0

私は気づいた:

ところでdisplayFormatに属性がHtml.EditorForヘルパーと一緒に使用され、それはあなたが使用しているものであるHtml.TextBoxForヘルパーと厳密には効果がありません

私が作業しているプロジェクトのEF POCOのうちの1つの 'Html.TextBoxFor'では' DisplayFormat'が正しく動作します。しかし、私が作業している編集ViewModelで、このフィールドの同一のコピーで全く同じ 'DisplayFormat'を使用しようとすると、フィールドはデフォルトの表示フォーマットを使用します。しかし、一意の 'DisplayName'はこれが' DataAnnotations'のこのセットを使用していることをどのように知っているか(つまり、 'DisplayName'に 'VMTest'を追加しました)です。これは私のプロジェクトに特有のものの結果かもしれませんが、それは私に混乱を引き起こす面白い特質でした。 –

0

、あなたは、ラムダまたはラムダとテキストを設定することができます。

"new {@class =" lbl "}"部分を削除してコードを実行すると、有効性が確認されます 。

編集:謝罪、私の最初のテストはEditorForと私のマシンの文化を使用していたが、米国に設定したので、それはすべての罰金を働きました。

あなたはMM \ DD \ yyyyの例を使用して、正しい文化にあなたのWebConfigにおけるグローバリゼーションの文化を設定することができます。

<globalization culture="en-us" /> 

が、これは(数値、日付、通貨などのフォーマットを含む)全体のウェブサイト上で有効になりますので、これは限られた場合であれば、これはあなたの問題の解決策ではないかもしれません。

関連する問題