2011-08-03 28 views
0

我已經在我的模型類以下dataannotation:DisplayFormat 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> 

能否請你建議方案?

回答

4

DisplayFormat屬性無關與驗證。它僅用於格式化顯示在視圖上的值。如果要驗證用戶在相應輸入字段中輸入的值,則必須編寫自定義模型聯編程序。

而且順便DisplayFormat屬性與Html.EditorFor助手一起使用,它與Html.TextBoxFor幫手嚴格沒有影響這是你使用的是什麼:

<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

我注意到'Html.TextBoxFor'爲我正在處理的項目中的一個EF POCO,'DisplayFormat'正常工作。但是,如果我嘗試使用此字段的編輯視圖模型我正在使用相同的副本完全一樣'DisplayFormat',現場使用默認的顯示格式。然而,獨特的'DisplayName'呢,這也是我怎麼知道它的使用這套DataAnnotations'的'(即我追加「VMTest」到'DisplayName')。這可能是我項目中某些具體事情的後果,但這是一個有趣的怪癖,這使我感到困惑。 –

0

的LabelFor沒有過載,使您可以設置CSS,你可以設置拉姆達或Lambda和文本。

當我刪除「新{@class =」lbl「}」部分並運行您的代碼時,我得到驗證工作 罰款。

編輯:道歉,我最初的測試是使用EditorFor和我的機器的文化被設定爲美國,所以它的工作都很好。

您可以在您的webconfig全球化文化到使用毫米\ DD \ YYYY如正確的文化。

<globalization culture="en-us" /> 

但這將接管整個網站(包括數字,日期,貨幣等的格式)的影響,所以如果這是一個有限的情況下,那麼這可能不是你的問題的解決方案。