У меня была такая же проблема, как у Кенчи. Я хотел использовать [Min] и [Max] одновременно, чтобы у меня было отдельное сообщение об ошибке для каждого типа ошибки вместо диапазона. Я тоже столкнулся с ...
Validation type names in unobtrusive client validation rules must be unique. The
following validation type was seen more than once: range
Потому что они решили использовать одно и то же имя проверки для обоих типов!
Я справился с этим, сохранив мин и создав собственный Int Max.
Добавьте этот класс где-нибудь, в идеале в классе CustomerValidation
public class MaximumDecimalCheck : ValidationAttribute, IClientValidatable
{
private readonly int _max;
private readonly string _defaultErrorMessage = "";
public MaximumDecimalCheck(int max, string defaultErrorMessage)
: base(defaultErrorMessage)
{
_max = max;
_defaultErrorMessage = defaultErrorMessage.Replace("{0}", _max.ToString());
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
return null;
int intValue;
bool parsedDecimal = int.TryParse(value.ToString(), out intValue);
if (parsedDecimal)
{
if (intValue < _max)
{
return ValidationResult.Success;
}
}
return new ValidationResult(_defaultErrorMessage);
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, _max);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var modelClientValidationRule = new ModelClientValidationRule();
modelClientValidationRule.ValidationType = "checkmaxint";
modelClientValidationRule.ErrorMessage = _defaultErrorMessage;
modelClientValidationRule.ValidationParameters.Add("maxint", _max.ToString());
return new List<ModelClientValidationRule> { modelClientValidationRule };
}
}
Тогда в вашем модельном объекте
[Required(ErrorMessage = "Monthly income (after tax) required")]
[DataType(DataType.Currency)]
[Display(Name = "Monthly income (after tax)")]
[Min(200, ErrorMessage = "You do not earn enough")]
[MaximumDecimalCheck(10000, "You earn to much a month")]
public decimal? MonthlyIncomeAfterTax { get; set; }
тип свойства может быть десятичным, int и т. Д., Однако он будет анализироваться только как int.
Я не смог создать статический тип десятичной дроби, поэтому быстро сдался, если кто-то может ответить на этот вопрос, я был бы очень счастлив.
После добавления обозначения обратитесь к следующему javascript.
(function ($) {
/*
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
*/
jQuery.validator.unobtrusive.adapters.add("checkmaxint", ['maxint'], function (options) {
options.rules["checkmaxint"] = options.params;
options.messages["checkmaxint"] = options.message;
});
jQuery.validator.addMethod("checkmaxint", function (value, element, params) {
var maxValue = params.maxint;
var inputValue = value;
var parsedInt = parseInt(inputValue);
if (isNaN(parsedInt)) {
return false;
}
else if (parsedInt > maxValue) {
return false;
}
else {
return true;
}
});
/*
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
*/
} (jQuery));
Надеюсь, это поможет.