私の(ビュー)モデルには、「$123.00」などを示す BillRate フィールドがあります。
[Display(Name = "Bill Rate")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
public Decimal BillRate { get; set; }
ApplyFormatInEditMode=true のため、これは '$' 記号を示しているため、有効な Decimal ではなく、テキスト ボックスからタブで移動すると (クライアント側の) 検証が失敗します。
独自のカスタムを追加することでこれを回避しますValidationAttribute
[DecimalSymbols(ErrorMessage = "Invalid currency")]
ここDecimalSymbols
で、記号を取り除き、残りの数字を解析します。
public sealed class DecimalSymbolsAttribute : ValidationAttribute, IClientValidatable
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
...
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
...
}
}
これはうまくいくようです。ただし、出力された HTML には、 my属性data-val-number
に加えて、まだ属性があります。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 を使用してみましたが、関係なく配置されます。ありがとう!