MVC3 프로젝트에서 축구 / 축구 / 하키 / … 스포츠 게임에 대한 점수 예측을 저장합니다. 따라서 내 예측 클래스의 속성 중 하나는 다음과 같습니다.
[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")]
답변
다음 정규식 중 하나를 시도하십시오.
// for numbers that need to start with a zero
[RegularExpression("([0-9]+)")]
// for numbers that begin from 1
[RegularExpression("([1-9][0-9]*)")]
도움이되기를 바랍니다 : D
답변
데이터 주석에 정규식 사용
[RegularExpression("([0-9]+)", ErrorMessage = "Please enter valid Number")]
public int MaxJsonLength { get; set; }
답변
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;
}
}
답변
이 속성을 시도하십시오.
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;
}
);
}
답변
거의 10 년이 지났지 만이 문제는 Asp.Net Core 2.2에서도 여전히 유효합니다.
data-val-number
입력 필드에 메시지에 현지화 사용 을 추가 하여 관리했습니다 .
<input asp-for="Age" data-val-number="@_localize["Please enter a valid number."]"/>
답변
ASP.NET Core 3.1
이것은 내 기능의 구현이며 다른 속성과 마찬가지로 사용자 정의 오류 메시지로 눈에 띄지 않는 jquery 유효성 검사뿐만 아니라 서버 측에서도 작동합니다.
속성 :
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class MustBeIntegerAttribute : ValidationAttribute, IClientModelValidator
{
public void AddValidation(ClientModelValidationContext context)
{
MergeAttribute(context.Attributes, "data-val", "true");
var errorMsg = FormatErrorMessage(context.ModelMetadata.GetDisplayName());
MergeAttribute(context.Attributes, "data-val-mustbeinteger", errorMsg);
}
public override bool IsValid(object value)
{
return int.TryParse(value?.ToString() ?? "", out int newVal);
}
private bool MergeAttribute(
IDictionary<string, string> attributes,
string key,
string value)
{
if (attributes.ContainsKey(key))
{
return false;
}
attributes.Add(key, value);
return true;
}
}
클라이언트 측 로직 :
$.validator.addMethod("mustbeinteger",
function (value, element, parameters) {
return !isNaN(parseInt(value)) && isFinite(value);
});
$.validator.unobtrusive.adapters.add("mustbeinteger", [], function (options) {
options.rules.mustbeinteger = {};
options.messages["mustbeinteger"] = options.message;
});
마지막으로 사용법 :
[MustBeInteger(ErrorMessage = "You must provide a valid number")]
public int SomeNumber { get; set; }