Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC无时间显示日期_C#_Asp.net Mvc_Datetime_Attributes_Data Annotations - Fatal编程技术网

C# ASP.NET MVC无时间显示日期

C# ASP.NET MVC无时间显示日期,c#,asp.net-mvc,datetime,attributes,data-annotations,C#,Asp.net Mvc,Datetime,Attributes,Data Annotations,我的模型字段按以下方式装饰: [DataType(DataType.Date)] [Display(Name = "Date of birth")] public string DateOfBirth { get; set; } 当我希望使用以下代码在视图中显示值时: <%: Html.DisplayFor(m => m.DateOfBirth) %> m.DateOfBirth)%> 问题是日期与其时间值一起显示。我想知道为什么它不考虑DateType属性,只显示日期值

我的模型字段按以下方式装饰:

[DataType(DataType.Date)]
[Display(Name = "Date of birth")]
public string DateOfBirth { get; set; }
当我希望使用以下代码在视图中显示值时:

<%: Html.DisplayFor(m => m.DateOfBirth) %>
m.DateOfBirth)%>

问题是日期与其时间值一起显示。我想知道为什么它不考虑DateType属性,只显示日期值而不显示时间。我知道我可以为DateTime创建一个显示模板,但在出生日期以外的其他情况下,我希望显示时间和日期。如何解决此问题?

对于编辑模式和显示,应该这样做

 [DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:MM/dd/yyyy}")]
如果只是显示,这可能会起作用

[DisplayFormat(DataFormatString = "{0:d}")]

用于指示显示值时的格式。另外,您可以创建两个DisplayTemplates,Date和DateTime,并使用来指定模板。这里的问题是您使用的是字符串值而不是DateTime

将您的模型更改为:

[DataType(DataType.Date)]
[Display(Name = "Date of birth")]
public DateTime? DateOfBirth { get; set; }

数据类型只有在它是DateTime类型时才能工作,您还可以获得额外的优势,即在使用DateTime时,它会自动将其验证为有效日期。如果使用字符串,则必须使用正则表达式验证程序来确保输入了正确的日期。

您可以使用ToSortDateString()或ToLongDateString()仅显示日期,例如:

@Model.EventDate.ToShortDateString()
@Model.EventDate.ToLongDateString()

如果您的日期类型为DateTime,并且
ToSortDateString()
ToLongDateString()
仍然不起作用,请检查您的日期时间是否为空(DateTime?)。将其设为不可为Null可以实现此目的。

使用@Value和ToSortDateString()只能显示日期

@Html.TextBoxFor(model => model.StartDate, "", new { id = "date", @class = "datepicker", @style = "width:70%; height:30px;", @placeholder = "Enter Date", @Value = @Model.StartDate.ToShortDateString()})

如果您使用的是MVC,也许您可以在客户端脚本上尝试:

@{
      string birthDateOnly = Model.DateOfBirth.Date.ToShortDateString();
 }
@Html.DisplayTextFor(m => birthDateOnly)

@我想你知道你在干什么。(这个)。这可能没有必要,但你肯定知道你必须比你在这里的评论更具体。他们给常识增加了什么?我会投票给你更好的答案。@MystereMan所以所谓的缓存爆破可能并不完美。现在就看,太壮观了!这么简单,解决了我的问题。谢谢我最近遇到过这样一个情况,chrome在输入类型为date时加入了一些有趣的东西,我想这是html5的一部分,我想用jquery datepicker来代替,所以我选择了DataType.Text,这仍然允许我使用格式enough@John-“有趣的东西”?这是html标准的一部分。如果您使用的是html5,那么应该使用html5输入类型。很有可能,你只是不了解一些事情,而不是做正确的事情,你现在已经打破了MVC的日期处理。不,我的意思是Chrome添加了日期选择器,它看起来不像我喜欢的jquery版本那么好