Asp.net mvc 数据注释自定义属性[日期时间]
我正在尝试将数据验证添加到我的DateTime属性中,我想强制用户选择介于Asp.net mvc 数据注释自定义属性[日期时间],asp.net-mvc,data-annotations,Asp.net Mvc,Data Annotations,我正在尝试将数据验证添加到我的DateTime属性中,我想强制用户选择介于DateTime.Now和DateTime.Now.addyears(+1) 这是我的代码: public class DateDebut : ValidationAttribute { public override bool IsValid(object value) { if (value == null) return
DateTime.Now
和DateTime.Now.addyears(+1)
这是我的代码:
public class DateDebut : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value == null) return false;
DateTime enteredDate = (DateTime)value;
if ( (enteredDate >= DateTime.Now) && (enteredDate <= DateTime.Now.AddYears(+1)))
return true;
else
return false;
}
}
[Required]
[Display(Name = "De : ")]
[DataType(DataType.Date)]
[DateDebut(ErrorMessage="Date invalide")]
public DateTime dd { get; set; }
公共类DateFirst:ValidationAttribute
{
公共覆盖布尔值有效(对象值)
{
if(value==null)返回false;
DateTime enteredDate=(DateTime)值;
如果((enteredDate>=DateTime.Now)&&(enteredDate属性本质上是静态的。您是否考虑过编写自己的属性进行验证?web上有几个示例可以帮助您开始
您还可以从RangeAttribute
继承并根据需要注入它。属性本质上是静态的。您是否考虑过编写自己的属性进行验证?web上有几个示例可以帮助您开始
您也可以从RangeAttribute
继承并根据需要注入它。我完全同意Daniel
然而,我发现当我需要在模型中比较属性时,我使用了IValidatableObject
我发现对于大多数小类型的比较来说,它更快、更容易
你会有一些像这样的
public class myModel : IvalidatableObject
{
string debut = DateTime.Now.ToShortDateString();
string fin = DateTime.Now.AddYears(+1).ToShortDateString();
[Required]
[Display(Name = "De : ")]
[DataType(DataType.Date)]
public DateTime dd { get; set; }
public IEnumerable<ValidationResult> Validate()
{
if(this.debut > this.fin)
{
yield return new ValidationResult("debut cannot be greated then fin");
}
}
}
公共类myModel:IvalidatableObject
{
字符串首秀=DateTime.Now.ToShortDateString();
string fin=DateTime.Now.AddYears(+1).toSortDateString();
[必需]
[显示(Name=“De:”)]
[数据类型(DataType.Date)]
公共日期时间dd{get;set;}
公共IEnumerable验证()
{
如果(this.处子秀>this.fin)
{
返回新的ValidationResult(“首次登场不能比最终登场更大”);
}
}
}
读一读,看看什么对你最好我完全同意丹尼尔的观点
然而,我发现当我需要在模型中比较属性时,我使用了IValidatableObject
我发现对于大多数小类型的比较来说,它更快、更容易
你会有一些像这样的
public class myModel : IvalidatableObject
{
string debut = DateTime.Now.ToShortDateString();
string fin = DateTime.Now.AddYears(+1).ToShortDateString();
[Required]
[Display(Name = "De : ")]
[DataType(DataType.Date)]
public DateTime dd { get; set; }
public IEnumerable<ValidationResult> Validate()
{
if(this.debut > this.fin)
{
yield return new ValidationResult("debut cannot be greated then fin");
}
}
}
公共类myModel:IvalidatableObject
{
字符串首秀=DateTime.Now.ToShortDateString();
string fin=DateTime.Now.AddYears(+1).toSortDateString();
[必需]
[显示(Name=“De:”)]
[数据类型(DataType.Date)]
公共日期时间dd{get;set;}
公共IEnumerable验证()
{
如果(this.处子秀>this.fin)
{
返回新的ValidationResult(“首次登场不能比最终登场更大”);
}
}
}
仔细阅读,看看什么最适合你这没有理由不起作用。发布你的控制器操作代码。查看代码和工作代码我忘了添加一些其他参数,但我想知道如何在客户端启用此验证,我已激活客户端验证,它可用于其他表单,但不在中这一个。您需要编写自定义Javasscript来执行等效的客户端验证。它在客户端用于其他验证的原因是因为您包含了Microsoft包含的不引人注目的库。没有理由这不起作用。发布控制器操作的代码。查看代码如下:我忘了添加一些其他参数,但我想知道如何在客户端启用此验证,我已经激活了客户端验证,它对其他表单有效,但不是在这个表单中。您需要编写自定义Javasscript来执行等效的客户端验证。这就是为什么它对ot在客户端有效她的确认是因为你包含了微软包含的不引人注目的库