我有同樣的問題,因爲Kenci。我想同時使用[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。
我未能創建一個小數位的靜態類型,所以很快投入,如果有人可以回答這個問題,我會很高興。
添加符號後,引用下面的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));
我希望有幫助。