ASP.NET MVC:模型 ─ 添加自定义 ValidationAttribute
ASP.NET MVC : Model ─ Adding custom ValidationAttribute
美好的一天!我在使用自定义 ValidationAttribute 时遇到了问题,当我添加一个刚从 This Whosebug answer by Mr. Walter Verhoeven 复制的属性时。
我的问题是 [Required] 属性被覆盖或忽略了,我对此一无所知并尝试搜索解决方案但无济于事,或者我可能没有想到要搜索的正确关键字,无论如何这是我的示例代码
型号
[Required]
[MinimumAge(18, ErrorMessage = "must be 18 years old or up")]
[Display(Name = "Birth date")]
public DateTime birthdate { get; set; }
对于新的 ValidationAttribute
public class MinimumAgeAttribute : ValidationAttribute
{
int _minimumAge;
public MinimumAgeAttribute(int minimumAge)
{
_minimumAge = minimumAge;
}
public override bool IsValid(object value)
{
DateTime date;
if (DateTime.TryParse(value.ToString(), out date))
{
return date.AddYears(_minimumAge) < DateTime.Now;
}
return false;
}
}
自定义 ValidationAttribute 就像一个魅力,用于验证其 18 岁,但是如果没有输入(或空),[Required] 属性不会触发或工作,而是转到
if (DateTime.TryParse(value.ToString(), out date))
其中当然给出了 "Object reference not set to an instance of an object" 的错误,因为 'value' 为空。
所以基本上我想让这两个属性一起工作。我想念什么?
-感谢您的阅读。
──────────────────────────────────────────── ──────
根据我对 Coding 和 Testuya 的解释的理解
──────────────────────────────────────────── ──────
[Required] 属性触发,但由于自定义属性发生错误,[Required] 属性响应被忽略,因此解决方案是 Tetsuya 的第一个回复和 Coding
的附议
public override bool IsValid(object value)
{
DateTime date;
try
{
if (DateTime.TryParse(value.ToString(), out date))
return date.AddYears(_minimumAge) < DateTime.Now;
}
catch (Exception) { }
return false;
}
谢谢你们回答我这个愚蠢的问题。
──────────────────────────────────────────── ──────
根据我对 Coding 和 Testuya 的解释的理解
──────────────────────────────────────────── ──────
[Required] 属性触发,但由于自定义属性发生错误,[Required] 属性响应被忽略,因此解决方案是 Tetsuya 的第一个回复并由 Coding 附议。
所以基本上,我只需要检查 'object value' 是否有值,如果 none 我们可以 return false,有很多方法可以检查和return 以下是我的做法。然后 [Required] 属性给出对 ValidationMessage 的响应,因为自定义属性不处理我们的值对象变量的空值。
public override bool IsValid(object value)
{
DateTime date;
try
{
if (DateTime.TryParse(value.ToString(), out date))
return date.AddYears(_minimumAge) < DateTime.Now;
}
catch (Exception) { }
return false;
}
谢谢你们回答我这个愚蠢的问题。
美好的一天!我在使用自定义 ValidationAttribute 时遇到了问题,当我添加一个刚从 This Whosebug answer by Mr. Walter Verhoeven 复制的属性时。
我的问题是 [Required] 属性被覆盖或忽略了,我对此一无所知并尝试搜索解决方案但无济于事,或者我可能没有想到要搜索的正确关键字,无论如何这是我的示例代码
型号
[Required]
[MinimumAge(18, ErrorMessage = "must be 18 years old or up")]
[Display(Name = "Birth date")]
public DateTime birthdate { get; set; }
对于新的 ValidationAttribute
public class MinimumAgeAttribute : ValidationAttribute
{
int _minimumAge;
public MinimumAgeAttribute(int minimumAge)
{
_minimumAge = minimumAge;
}
public override bool IsValid(object value)
{
DateTime date;
if (DateTime.TryParse(value.ToString(), out date))
{
return date.AddYears(_minimumAge) < DateTime.Now;
}
return false;
}
}
自定义 ValidationAttribute 就像一个魅力,用于验证其 18 岁,但是如果没有输入(或空),[Required] 属性不会触发或工作,而是转到
if (DateTime.TryParse(value.ToString(), out date))
其中当然给出了 "Object reference not set to an instance of an object" 的错误,因为 'value' 为空。
所以基本上我想让这两个属性一起工作。我想念什么?
-感谢您的阅读。
──────────────────────────────────────────── ──────
根据我对 Coding 和 Testuya 的解释的理解
──────────────────────────────────────────── ──────
[Required] 属性触发,但由于自定义属性发生错误,[Required] 属性响应被忽略,因此解决方案是 Tetsuya 的第一个回复和 Coding
的附议 public override bool IsValid(object value)
{
DateTime date;
try
{
if (DateTime.TryParse(value.ToString(), out date))
return date.AddYears(_minimumAge) < DateTime.Now;
}
catch (Exception) { }
return false;
}
谢谢你们回答我这个愚蠢的问题。
──────────────────────────────────────────── ──────
根据我对 Coding 和 Testuya 的解释的理解
──────────────────────────────────────────── ──────
[Required] 属性触发,但由于自定义属性发生错误,[Required] 属性响应被忽略,因此解决方案是 Tetsuya 的第一个回复并由 Coding 附议。
所以基本上,我只需要检查 'object value' 是否有值,如果 none 我们可以 return false,有很多方法可以检查和return 以下是我的做法。然后 [Required] 属性给出对 ValidationMessage 的响应,因为自定义属性不处理我们的值对象变量的空值。
public override bool IsValid(object value)
{
DateTime date;
try
{
if (DateTime.TryParse(value.ToString(), out date))
return date.AddYears(_minimumAge) < DateTime.Now;
}
catch (Exception) { }
return false;
}
谢谢你们回答我这个愚蠢的问题。