提交时验证数据注释模型中的多个字段(日期时间和Bool值)
本文关键字:日期 字段 时间 Bool 数据 验证 注释 模型 提交 | 更新日期: 2023-09-27 18:10:45
目前我正在MVC 3环境中工作,我需要添加一个验证,验证数据注释模型中的2个字段,就像验证在提交时触发的[Required(ErrorMessage="Required!")]
一样。
目前,验证[Required]
正在工作,但我需要检查bool
和dateTime
数据类型是否
这是我的模型中的代码
public class NameInfo: IValidatableObject
{
[Display(Name = "Name")]
[Required(ErrorMessage = "Required!")]
public string Name{ get; set; }
[Display(Name = "Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<DateTime> StartDate { get; set; }
[Display(Name = "Already Starting")]
public bool IsStarting{ get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (!IsStarting&& !StartDate.HasValue)
{
yield return new ValidationResult("Required.", new[] { "StartDate" });
}
}
}
目前我使用IValidatableObject
,但它不验证,除非name
字段的modelstate已经是有效的
提前感谢!
目前我使用IValidatableObject,但它不验证,除非名称字段modelstate已经有效
DataAnnotations
和IValidatableObject
不能同时生效。我的意思是IValidatableObject
的validate方法只会在DataAnnotations
有效的情况下被调用。
要么编写自己的ValdiationAttribute
,要么将所需的验证添加到IValidatableObject
中。
下面是后者的一个例子…
public class NameInfo : IValidatableObject
{
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<DateTime> StartDate { get; set; }
[Display(Name = "Already Starting")]
public bool IsStarting { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrEmpty(Name))
{
yield return new ValidationResult("Name is required!");
}
if (!IsStarting && !StartDate.HasValue)
{
yield return new ValidationResult("Required.", new[] { "StartDate" });
}
}
}