我的(视图)模型有一个 BillRate 字段,显示例如“$123.00”
[Display(Name = "Bill Rate")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
public Decimal BillRate { get; set; }
由于 ApplyFormatInEditMode=true,这会显示一个“$”符号,因此它不是有效的十进制,并且当我从文本框中跳出时(客户端)验证失败。
我通过添加自己的自定义来解决这个问题ValidationAttribute
[DecimalSymbols(ErrorMessage = "Invalid currency")]
where DecimalSymbols
which 剥离符号然后解析剩余的数字:
public sealed class DecimalSymbolsAttribute : ValidationAttribute, IClientValidatable
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
...
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
...
}
}
这似乎运作良好。data-val-number
但是,除了我的属性之外,发出的 HTML 仍然具有data-val-decimalsymbols
属性:
<input data-val="true" data-val-decimalsymbols="Invalid currency" data-val-number="The field Bill Rate must be a number." id="BillRate" name="BillRate" type="text" value="$82.80" />
该data-val-number
属性导致 jQuery 验证失败,因为 '$' 使字符串不是数字。我不再需要这个属性了,但是我如何告诉 ASP.NET MVC 不要放它呢?我尝试过使用 EditorFor、TextBoxFor 和 TextBox,不管它是什么都放了。谢谢!