2011-05-20 120 views
0

我正在嘗試實現對數據類型的限制。我已經使用DataAnnotations,但對於數據類型,它不顯示自定義消息asp.net mvc 3驗證數據類型

例如,當我試圖輸入字符串數據到int類型字段。在這種情況下,我如何定製消息?

+2

請顯示您的模型類和您的視圖 – hunter 2011-05-20 17:41:03

回答

4

如果我不得不猜測,您聽起來像是在驗證模型中的一個或多個字段時要顯示自定義消息。你也可以繼承的DataAnnotations.ValidationAttribute類並重寫IsValid(object)方法,最後設置自定義ErrorMessage值(其中ErrorMessage已經屬於ValidationAttribute類)

public class SuperDuperValidator : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     bool valid = false; 
     // do your validation logic here 
     return valid; 
    } 
} 

最後,裝飾與屬性

public class MyClass 
{ 
    [SuperDuperValidator(ErrorMessage="Something is wrong with MyInt")] 
    public int MyInt { get; set; } 
} 
你的模型屬性

如果您使用開箱即用的MVC3,則應該只需要對模型進行屬性驗證(儘管您的模型可能會有所不同/具有更多屬性等)。因此,在您的[HttpPost]控制器操作中,MVC將會自動綁定MyClass,您將能夠使用ModelState.IsValid來確定發佈的數據實際上是否有效。

+0

喜歡驗證器名稱:) lmao – IamStalker 2011-07-06 08:56:27

2

Pavel,

DataAnnotations DataType屬性不影響驗證。它用來決定你的輸入是如何呈現的。在這種情況下,David的解決方案在上面起作用。

然而,如果你希望只使用內置的驗證屬性,您可能需要使用這樣的範圍屬性:

[Range(0, 10, ErrorMessage="Please enter a number between 0 and 10")] 
public int MyInt { get ; set ;} 

(當然,你真正應該使用ErrorMessageResourceName /類型參數,並提取出硬編碼錯誤消息字符串到RESX文件)

確保讓MVC知道哪裏來呈現你的錯誤信息:

<%= Html.ValidationMessageFor(m => m.MyInt) %> 

或者您可以使用EditorForModel,它會正確設置它。

0

我不認爲這已被回答,因爲我有同樣的問題。

如果您有一個具有int類型屬性的模型,並且用戶鍵入了一個「asd」字符串,那麼MVC3框架綁定/驗證步驟將導致您的視圖顯示"The value 'asd' is not valid for <model property name or DisplayName here>"

對我來說,海報是要求這個消息,MVC3框架輸出定製? 我也想知道。雖然該消息是不是太糟糕,如果你標記你的領域的東西,很容易表示數量預計可能仍然需要包括其他的原因所以說像:

"The value 'asd' is not valid for &lt;fieldname&gt;; must be a positive whole number."

讓用戶沒有進入值之後的值以及每次獲取不同的錯誤消息。