我已经看到了其他一些与本地化有关的问题,但这似乎不是问题。
我的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,然后将其添加到数据库中。
答案 0 :(得分:3)
我很惊讶您收到数字的验证错误(除非您有一个单独的验证方法,而您没有显示)。除了Required
注释之外,模型中的任何内容都不会导致任何验证。无论如何,我建议您查看DataAnnotationsExtensions
的十进制验证:
http://dataannotationsextensions.org/Numeric/Create
然后您可以使用decimal
[Numeric]
值
如果您的模型可以接受,您也可以尝试[DataType(DataType.Currency)]
。
您的模型上有验证方法吗?
修改
尝试使用float
或double
代替decimal
。我认为decimal
这个词可能是骗人的。在此处查看decimal
课程:http://msdn.microsoft.com/en-us/library/364x0z75(v=vs.80).aspx。
它可能会解决一些问题。小数如下所示:
decimal myMoney = 300.5m;