私のMVC3プロジェクトでは、フットボール/サッカー/ホッケー/ ...スポーツゲームのスコア予測を保存しています。したがって、私の予測クラスのプロパティの1つは次のようになります。
[Range(0, 15, ErrorMessage = "Can only be between 0 .. 15")]
[StringLength(2, ErrorMessage = "Max 2 digits")]
[Remote("PredictionOK", "Predict", ErrorMessage = "Prediction can only be a number in range 0 .. 15")]
public int? HomeTeamPrediction { get; set; }
ここで、データ型のエラーメッセージ(私の場合はint
)も変更する必要があります。使用されるデフォルトのものがいくつかあります-「HomeTeamPredictionフィールドは数字でなければなりません。」。このエラーメッセージを変更する方法を見つける必要があります。この検証メッセージは、リモート検証の予測にも使用されるようです。
[DataType]
属性を試しましたが、これはsystem.componentmodel.dataannotations.datatype
列挙の単純な数字ではないようです。
番号検証では、要件に応じて異なる範囲検証を使用する必要があります。
整数の場合
[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]
フロート用
[Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]
ダブル用
[Range(0, double.MaxValue, ErrorMessage = "Please enter valid doubleNumber")]
正規表現を試す
[RegularExpression("([0-9]+)")] // for 0-inf or
[RegularExpression("([1-9][0-9]*)"] // for 1-inf
それが役立つことを願って:D
データ注釈で正規表現を使用する
[RegularExpression("([0-9]+)", ErrorMessage = "Please enter valid Number")]
public int MaxJsonLength { get; set; }
この属性を試してください:
public class NumericAttribute : ValidationAttribute, IClientValidatable {
public override bool IsValid(object value) {
return value.ToString().All(c => (c >= '0' && c <= '9') || c == '-' || c == ' ');
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) {
var rule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.DisplayName),
ValidationType = "numeric"
};
yield return rule;
}
}
また、バリデータプラグインに属性を登録する必要があります。
if($.validator){
$.validator.unobtrusive.adapters.add(
'numeric', [], function (options) {
options.rules['numeric'] = options.params;
options.messages['numeric'] = options.message;
}
);
}
public class IsNumericAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
decimal val;
var isNumeric = decimal.TryParse(value.ToString(), out val);
if (!isNumeric)
{
return new ValidationResult("Must be numeric");
}
}
return ValidationResult.Success;
}
}
ほぼ10年が過ぎましたが、この問題はAsp.Net Core 2.2でも有効です。
入力フィールドにdata-val-number
を追加して管理し、メッセージでローカライズを使用します。
<input asp-for="Age" data-val-number="@_localize["Please enter a valid number."]"/>