MVC3 Decimal字段未正确验证

本文关键字:验证 Decimal 字段 MVC3 | 更新日期: 2023-09-27 18:20:11

我看到了一些关于本地化的其他问题,但这似乎不是问题所在。

我的ViewModel 中有2个十进制字段

[DisplayName("Standard Hourly Rate")]
public decimal Rate { get; set; }
[Required]
[DisplayName("Daily Travel Rate")]
public decimal TravelRate { get; set; }

在我看来,我有这个:

<div class="editor-label">
    @Html.LabelFor(model => model.Rate)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Rate)
    @Html.ValidationMessageFor(model => model.Rate)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.TravelRate)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.TravelRate)
    @Html.ValidationMessageFor(model => model.TravelRate)
</div>

这看起来应该很好,但每当我提交表单时,我都会收到一个验证错误。如果我提交任何带小数或不带小数的数字,我会被告知该值无效。如果我输入的东西不是数字,我会被告知它必须是数字。

编辑:HTML输入看起来像这个

<input type="text" value="" name="Rate" id="Rate" data-val-required="The Standard Hourly Rate field is required." data-val-number="The field Standard Hourly Rate must be a number." data-val="true" class="text-box single-line">
<input type="text" value="" name="TravelRate" id="TravelRate" data-val-required="The Daily Travel Rate field is required." data-val-number="The field Daily Travel Rate must be a number." data-val="true" class="text-box single-line">

Edit2:控制器只检查Modelstate.IsValid,然后将其添加到数据库中。

MVC3 Decimal字段未正确验证

我很惊讶你会收到数字的验证错误(除非你有一个单独的验证方法,但你没有显示)。除了Required注释之外,模型中的任何内容都不会引起任何验证。无论如何,我建议查看DataAnnotationsExtensions以进行十进制验证:

http://dataannotationsextensions.org/Numeric/Create

然后你可以用[Numeric] 装饰你的decimal

如果您的模型可以接受[DataType(DataType.Currency)],您也可以尝试它。

您的模型上有验证方法吗?

编辑

尝试使用floatdouble而不是decimal。我认为decimal这个词可能是骗人的。点击此处查看decimal类:http://msdn.microsoft.com/en-us/library/364x0z75(v=vs.80).aspx.

它可能会解决一些问题。小数如下:

decimal myMoney = 300.5m;

好的,所以我的问题是发布回控制器的Model为null。之所以会发生这种情况,是因为它所寻找的参数叫做rate,而我的模型中也有一个名为rate的属性。我刚刚在控制器中将rate重命名为myrate,现在一切都很好。