2010-12-21 71 views
0

如何为此场景定制数据注释验证。验证数据类型的MVC数据注释

我收到此错误:

The value 'Select Province' is not valid for Province.

我希望它这样

Please select a country

我的视图模型是这样的:

[DisplayName("Province")] 
    [UIHint("ProvinceDropDown")] 
    public long? ProvinceId { get; set; } 

我的观点是选择列表:

<select name="ProvinceId" id="ProvinceId" class="input-validation-error"> 
    <option value="">Select Province</option> 
    <option value="613">Allen </option> 
    <option value="614">Anderson</option> 
    // data truncated .... 
</select> 
+0

我以前从来没有见过'UIHintAttribute' - 它做了什么? :) – 2010-12-21 05:41:56

回答

2

您需要添加ErrorMessage = "Please Select a Country"到您的注释属性,类似于the example here:

[Range(0, 50, ErrorMessage = "Quantity on order must be between 0 and 50.")] 
public int OnOrder { get; set; } 
+0

我将添加ErrorMessage属性。 AFAIK它只能附加到验证属性。但是,我没有。它会引发错误,因为“Select Province”没有价值。 – 2010-12-21 03:45:00

+0

@geocine:要获取验证器,请添加“using System.ComponentModel.DataAnnotations;”和System.ComponentModel.DataAnnotations.dll作为参考。 – CRice 2010-12-21 04:25:33

+0

@CRice你让我错了,我知道如何添加验证器。试试我的测试用例。我没有任何对ProvinceID属性的验证属性,所以我不能附加任何错误消息。使用Robert的例子,你可以设置一个错误消息,因为你有一个范围验证属性。每次违反规则时,都会在视图中显示错误消息。我没有任何规则,但弹出了无效类型的默认错误。 – 2010-12-21 04:46:05

0

要定制可以从ValidationAttribute继承验证:

public class SomeAttribute : System.ComponentModel.DataAnnotations.ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
    } 
} 

我想你不会需要做到这一点而是应该尝试使您的可为空的字符串长,并在此属性上具有验证器。

public string ProvinceId { get; set; } 

然后将您的视图模型转换为某个具有可为空的长度的域模型,一旦验证通过。