У меня есть пользовательская проверка, которая проверяет другое поле, а затем определяет, находится ли рассматриваемое поле в определенном диапазоне номеров. Он отлично работает всякий раз, когда пользователь вводит число. Однако, если пользователь передает не-число, это не-число (параметр value
) не передается в валидацию. Вместо этого null
передается на проверку. Я бы предпочел, чтобы число с запятыми передавалось. Вместо этого пользователю представляется загадочный символ "The value XXX is not valid for XXX
, который не помогает. Я также получил аннотации данных [Required]
и [Numeric]
в этом поле. Они обычно ловят любые проблемы. Однако, если пользователь введет правильный номер с запятой, значение не будет передано в мою пользовательскую проверку. Я не уверен, где проблема происходит. Какие-нибудь мысли? Я попытался удалить запятые с помощью javascript, но значение, передаваемое моей пользовательской проверке, все еще равно нулю. Вот моя пользовательская проверка, которая называется:
public sealed class RequiresRangeAmount : ValidationAttribute
{
public RequiresRangeAmount(string property)
{
Property = property;
}
public string Property { get; set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var property = validationContext.ObjectType.GetProperty(Property);
if (property != null)
{
var loanSubType = (int)property.GetValue(validationContext.ObjectInstance, null);
if (loanSubType == LoanSubTypeConstants.Visa|| loanSubType == LoanSubTypeConstants.Visa2)
{
var valueConverted = Convert.ToDecimal(value);
if (valueConverted < 5000 || valueConverted > 75000)
{
return new ValidationResult(ErrorMessage);
}
}
}
return null;
}
}
Вот используется:
[Required]
[Numeric]
[RequiresRangeAmount("LoanSubType", ErrorMessage = "A VISA must be in XXX range.")]
[DisplayName("Requested Loan Amount")]
public decimal? RequestedAmount { get; set; }
Внешний интерфейс для удаления запятых не помогает:
$("#mainForm").submit(function() {
var strippedCommasAmount = $("#RequestedAmount").val().replace(/,/g, '');
$("#RequestedAmount").val(strippedCommasAmount);
});