Я создал свою собственную модель собственности, которая говорит «ErrorMessage не может быть найден»:Показать ErrorMessage в собственной модели собственности
[DataType(DataType.EmailAddress)]
[Required]
[Display(Name = "Email")]
[StringLength(80, ErrorMessage = "Email too large.")]
[RegularExpressionTimeOut(@"^([a-zA-Z0-9._-]+)@(outlook|hotmail|yahoo)\.\w{2,}$", 5),
ErrorMessage = "Invalid email."] // 5 seconds
public string Email { get; set; }
и класс этого свойства:
public class RegularExpressionTimeOut :
System.ComponentModel.DataAnnotations.ValidationAttribute
{
public System.TimeSpan TimeOut { get; set; }
public string Pattern { get; set; }
//public string ErrorMessage { get; set; }
//new System.TimeSpan(0, 0, 5)
/// <summary>
/// Constructor
/// </summary>
/// <param name="pattern">Regular expression as string</param>
/// <param name="timeOut">Number of seconds</param>
public RegularExpressionTimeOut(string pattern, int timeOut)
{
this.Pattern = pattern;
this.TimeOut = new System.TimeSpan(0, 0, timeOut);
}
public override bool IsValid(object value)
{
//if (!string.IsNullOrEmpty(this.ErrorMessage) && ...)
return (new System.Text.RegularExpressions.Regex(this.Pattern,
System.Text.RegularExpressions.RegexOptions.None, this.TimeOut))
.IsMatch(this.Pattern);
}
}
Тогда возникает вопрос: как я могу показать ErrorMessage?
Обновлено с помощью FormatErrorMessage В моем веб-сообществе нет сообщения об ошибке.
public class RegularExpressionTimeOut : System.ComponentModel.DataAnnotations.ValidationAttribute
{
public System.TimeSpan TimeOut { get; set; }
public string Pattern { get; set; }
private const string DefaultErrorMessage = "Invalid email.";
//private string ErrorMessage;
/// <summary>
/// Constructor
/// </summary>
/// <param name="pattern">Regular expression as string</param>
/// <param name="timeOut">Number of seconds</param>
public RegularExpressionTimeOut(string pattern, int timeOut) : base(DefaultErrorMessage)
{
this.Pattern = pattern;
this.TimeOut = new System.TimeSpan(0, 0, timeOut);
//this.ErrorMessage = errorMessage;
}
public override bool IsValid(object value)
{
//if (!string.IsNullOrEmpty(this.ErrorMessage) && ...)
return (new System.Text.RegularExpressions.Regex(this.Pattern, System.Text.RegularExpressions.RegexOptions.None, this.TimeOut)).IsMatch(this.Pattern);
}
public override string FormatErrorMessage(string ErrorMessage)
{
return string.Format(ErrorMessageString, ErrorMessage);
}
}
«DefaultErrorMessage не Existe в текущий контекст ". И почему declade DefaultErrorMessage как константа, если я должен назначить ему значение в конструкторе? – Joe
Как он не может существовать - он определен в первой строке кода, который я вам дал - 'private const string DefaultErrorMessage =" Invalid email ";'! –
Кроме того, у вас есть закрывающая скобка в неправильном месте - это должно быть '[RegularExpressionTimeOut (@" .... ", 5, ErrorMessage =" Недопустимый адрес электронной почты. ")]' –