В других свойствах одного и того же объекта модели доступны одна информация о свойствах/правилах проверки модели. Я должен проверять значения свойств, используя другие значения свойств.Добавить правило проверки для динамического моделирования свойства в asp.net mvc2
Модель класса: -
[FormatValidtion("Value", "Format", "MinLength", "MaxLength", ErrorMessage = "Please enter correct format")]
public class Sample
{
#region ModelProperties
public string Id { get; set; }
[Required(ErrorMessage = "Please Enter Value")]
public string Value { get; set; }
public string Format { get; set; }
public string MinLength { get; set; }
public string MaxLength { get; set; }
#endregion
}
объект Модель выглядит как above.Here я должен проверить Value свойство с помощью
Формат (Fomart Validation как электронная почта, телефон & Дата)
MinLength, MaxLength (Диапазон проверки).
Я знаю, что мы можем сделать это с помощью пользовательских валидаций как
- Создать пользовательский класс по поддержанию ValidationAttribute в качестве основы
- Pass все эти свойства (значение, формат, MinLength & MaxLength)
- Запишите корпус переключателя с свойством Format.
- Подтвердить формат с помощью Regex и выполнить ручную проверку диапазона или с динамической проверкой Regex.
EDIT: - Добавлена проверка на заказ Код класса Здесь
Пользовательские проверки Класс:
[AttributeUsage(AttributeTargets.Class)]
public class FormatValidtion : ValidationAttribute
{
public String Value { get; set; }
public String Format { get; set; }
public String MinLength { get; set; }
public String MaxLength { get; set; }
public FormatValidtion(String value, String format, String minLength, String maxLength)
{
Value = value;
Format = format;
MinLength = minLength;
MaxLength = maxLength;
}
public override Boolean IsValid(Object value)
{
Type objectType = value.GetType();
PropertyInfo[] neededProperties =
objectType.GetProperties()
.Where(p => p.Name == Value || p.Name == Format || p.Name == MinLength || p.Name == MaxLength)
.ToArray();
if (neededProperties.Count() != 4)
{
throw new ApplicationException("PropertiesMatchAttribute error on " + objectType.Name);
}
Boolean isMatched = true;
switch (Convert.ToString(neededProperties[1].GetValue(value, null)))
{
case "Alpha":
Regex regExAlpha = new Regex(@"/^[A-Za-z]+$/");
if (!regExAlpha.IsMatch(Convert.ToString(neededProperties[0].GetValue(value, null))))
{
isMatched = false;
}
break;
case "Number":
Regex regExNumber = new Regex(@"/^[0-9]+$/");
if (!regExNumber.IsMatch(Convert.ToString(neededProperties[0].GetValue(value, null))))
{
isMatched = false;
}
break;
case "AlphaNum":
Regex regExAlphaNum = new Regex(@"/^[a-zA-Z][a-zA-Z0-9]+$/");
if (!regExAlphaNum.IsMatch(Convert.ToString(neededProperties[0].GetValue(value, null))))
{
isMatched = false;
}
break;
default:
isMatched = false;
break;
}
return isMatched;
}
}
Это работает правильно на уровне класса и показ сообщений проверки через резюме проверки. Но я хочу изменить приведенный выше код, чтобы сделать следующее.
- Валидация должна происходить на уровне собственности или в какой-либо форме, где должно отображаться сообщение об ошибке на уровне свойства (с использованием вспомогательного класса validationMessage).
- Необходимо указать конкретные сообщения об ошибках для каждой проверки, кроме общего сообщения об ошибке.
- Проверка диапазона должна произойти.
Может ли кто-нибудь представить некоторые мысли вокруг них?
спасибо за ур ответ. Можете ли вы предоставить аналогичные примеры, как изменить приведенный выше код? –
Извините, на данный момент у меня нет времени: (Вы прочитали ссылку с похожими вопросами и объяснениями? – archil