2012-04-24 36 views
0

在我的模型我有一個是通過以下方式標註的某一特定領域:爲什麼MVC 3驗證覆蓋我的?

[DataType(System.ComponentModel.DataAnnotations.DataType.Text)] 
    [RegularExpression("[0-9]{1,10}", ErrorMessage = "The stated Attempt Id is invalid!")] 
    public long? AttemptId { get; set; } 

當我在嘗試ID輸入不正確的數據它給我的模型狀態出現以下錯誤信息:

The value 'cbcbxcb' is not valid for AttemptId. 

我有其他領域有類似的錯誤消息,但他們的字符串類型而不是長?並在出現無效值的情況下顯示正確的錯誤消息。爲什麼不是「長」的信息?正在使用?我在頁面中使用folowing文字標記顯示我的錯誤。

<%: Html.TValidationSummary() %> 

編輯:我曾嘗試在模型中更改驗證以下內容:

[Required(ErrorMessage="The stated Attempt Id is invalid!", AllowEmptyStrings=true)] 

然而,這仍是不正確。首先,我需要讓該字段保持空白,當我這樣做時,它會給我「所述的嘗試標識無效!」。錯誤信息。其次,當我在字段中輸入無效數據時,它將恢復爲舊的錯誤消息。

回答

1

RegularExpression驗證屬性僅適用於字符串類型。要獲取自定義錯誤消息,請改用Required驗證屬性,並將自己的自定義錯誤消息放入。

如果您的模型參數不是必需的,則可以在控制器內執行驗證並使用自己的自定義消息ModelState.AddModelError方法 - 儘管這有點破綻。

+0

感謝您的回答。現在訣竅是該特定字段不是真正必需的字段,因此用戶應該允許將其保留爲空。有沒有辦法做到你的建議,而不是將其綁定爲「必需」? – 2012-04-24 11:05:18

+0

我將驗證更改爲'[必需(ErrorMessage =「聲明的嘗試標識無效!」,AllowEmptyStrings = true)]',現在它顯示錯誤消息,如果留空(它不應該)並仍然顯示錯誤錯誤消息eif無效。 – 2012-04-24 11:26:58

+0

已經編輯過,如果你的參數是非強制性的,提供了一個替代解決方案 – DaveRead 2012-04-24 12:19:52

1

它可能是MVC綁定甚至無法將輸入值轉換爲正確類型的事實,因此它已知道該值必須無效。

+0

好的,有沒有辦法讓MVC在發生這種情況時使用我的消息? – 2012-04-24 10:39:11

+0

還沒有嘗試過,你可以嘗試從另一個SO問題的這種方法:http://stackoverflow.com/questions/9173034/override-datatype-mismatch-message-of-property-in-asp-net-mvcand-display -messag – 2012-04-24 11:19:43

1

您應該使用FluentValidation

內置的使用屬性驗證的東西是易碎和骯髒 - 至少可以說。

+0

很樂意使用有用的東西,不幸的是,這不是一個個人項目,並且將第三方軟件引入系統並不是一種選擇。無論如何感謝您的建議。 – 2012-04-24 11:37:47