MVC3属性验证问题

Jef*_*ddy 2 validation data-annotations asp.net-mvc-3

在我看来,我的验证变得很奇怪.

我的模特有这个属性.

    [Display(Name = "Overflow Capacity")]
    [RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]", ErrorMessage = "Number required.")]
    [Range(0,9999.99,ErrorMessage = "Value must be between 0 - 9,999.99")]
    public decimal OverFlowCapacity { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的观点是这样的:

<tr>
   <td>@Html.LabelFor(m=> m.OverFlowCapacity)</td>
   <td>@Html.EditorFor(m=>m.OverFlowCapacity)</td>                                               
   <td> @Html.ValidationMessageFor(model => model.OverFlowCapacity)</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

如果我输入类似'ABC'的值,我会收到验证消息'Number required'如果我输入值999999,我会收到验证消息'Value必须介于0 - 9,999.99'之间

当我按预期关闭文本框时,会收到这两条消息.当我将文本框值保留为空并关闭时,我没有按预期得到任何错误.

但是,当我提交时,我收到验证消息"需要溢出容量字段".

我不知道这是从哪里来的.我已尝试从模型中删除所有验证属性,但仍然会收到"必需"消息.我不知所措.

这是我引用的脚本.

我还有mvcfoolproof的其他问题,我可以稍后发布.我想知道这是不是以某种方式对我的问题负责.

Ale*_*oun 8

现在发生的事情是,在提交表单并确定decimal值不可能之后,后验证正在进行null.现在你使用的decimal是一个不可为空的类型.如果您想要此行为并且希望在提交表单之前看到验证,则将该[Required]属性添加到该属性.但是,如果您希望使用此功能,则可以null将类型更改decimaldecimal?Nullable<decimal>.

不允许空值并进行预提交验证:

[Display(Name = "Overflow Capacity")]
[RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]", ErrorMessage = "Number required.")]
[Range(0,9999.99,ErrorMessage = "Value must be between 0 - 9,999.99")]
[Required]
public decimal OverFlowCapacity { get; set; }
Run Code Online (Sandbox Code Playgroud)

允许空值并删除提交后验证错误:

[Display(Name = "Overflow Capacity")]
[RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]", ErrorMessage = "Number required.")]
[Range(0,9999.99,ErrorMessage = "Value must be between 0 - 9,999.99")]
public decimal? OverFlowCapacity { get; set; }
Run Code Online (Sandbox Code Playgroud)