RequiredAttribute
适用于string
但适用于DateTime
。例如:
[Required]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string Name { get; set; }
[Required]
[DataType(DataType.DateTime)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MMM-yyyy}", ConvertEmptyStringToNull = false)]
public DateTime Birthdate { get; set; }
如果Name
为空,则验证显示错误,但如果Birthdate
为空,则表示没有任何反应。我看了看:
ASP MVC 5 Client Validation for Range of Datetimes
和
但仍不适用于DateTime
答案 0 :(得分:2)
我认为DateTime有一个标准值,所以你应该添加一个范围属性
而不是必需的[Range(typeof(DateTime), "01/01/1900", "01/01/2100", ErrorMessage="Date is out of Range")]
像这样的事情应该可以解决问题
答案 1 :(得分:2)
DateTime
是一个结构,结构是#34;值类型",而不是"引用类型",所以它们的默认值不是null
,对于{{ 1}}它是DateTime
,1/1/0001 12:00:00 AM
的默认值为int
。
0
类型是"引用类型",所有引用类型的默认值均为string
。
因此,如果您想检查值类型是否为null
,则应将其创建为null
。
像这样:
Nullable
或者
public DateTime? Birthdate { get; set; }
答案 2 :(得分:1)
这是因为Birthdate
属性不可为空,所以它总是有一个值,如果改为:
public Nullable<DateTime> Birthdate { get; set; }
然后必需的属性将按预期工作。
答案 3 :(得分:0)
如果您不想使DateTime
可以为空,但仍然将默认值0001-01-01 12:00:00 AM(DateTime.MinValue
)解释为&#34;缺少&#34;,只需创建自己的验证器:
public class RequiredDateTimeAttribute : ValidationAttribute
{
public RequiredDateTimeAttribute()
{
ErrorMessage = "The {0} field is required";
}
public override bool IsValid(object value)
{
if (!(value is DateTime))
throw new ArgumentException("value must be a DateTime object");
if ((DateTime)value == DateTime.MinValue)
return false;
return true;
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name);
}
}
答案 4 :(得分:0)
您可以在EditorTemplates和Date.cshtml中使用kendo ui组件,然后当默认日期为DateTime.Now
@using Kendo.Mvc.UI
@model DateTime?
@if (Model.ToString() == "0001-01-01T00:00:00")
{
@Html.Kendo().DatePickerFor(m => m).Format("yyyy/MM/dd").HtmlAttributes(new {style = "width: 20em", type = "text" }).Value(DateTime.Now).Footer("Today - #=kendo.toString(data, 'dddd yyyy/MM/dd') #")
}
else
{
@Html.Kendo().DatePickerFor(m => m).Format("yyyy/MM/dd").HtmlAttributes(new {style = "width: 20em", type = "text"}).Value(Model).Footer("Today- #=kendo.toString(data, 'dddd yyyy/MM/dd') #")
}
在viewmodel类中使用
[UIHint("Date")]
public DateTime CreateDate { get; set; }
答案 5 :(得分:0)