如何在ASP.NET MVC 3中以特定格式呈现date时间?

如果我在我的模型类中有一个DateTimetypes的属性,我怎样才能以特定的格式渲染它 – 例如ToLongDateString()返回的格式?

我试过这个…

 @Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString()) 

…因为expression式必须指向一个属性或者字段,所以抛出一个exception。 和这个…

 @{var val = item.MyDateTime.ToLongDateString(); Html.DisplayFor(modelItem => val); } 

…它不会抛出exception,但呈现的输出是空的(虽然val包含期望的值,我可以在debugging器中看到)。

提前感谢提示!

编辑

ToLongDateString只是一个例子。 我真正想要使用而不是ToLongDateStringDateTimeDateTime?的自定义扩展方法DateTime?

 public static string FormatDateTimeHideMidNight(this DateTime dateTime) { if (dateTime.TimeOfDay == TimeSpan.Zero) return dateTime.ToString("d"); else return dateTime.ToString("g"); } public static string FormatDateTimeHideMidNight(this DateTime? dateTime) { if (dateTime.HasValue) return dateTime.Value.FormatDateTimeHideMidNight(); else return ""; } 

所以,我想我不能在ViewModel属性上使用DisplayFormat属性和DataFormatString参数。

如果您只想以特定的格式显示date,请致电:

 @String.Format(myFormat, Model.MyDateTime) 

使用@Html.DisplayFor(...)只是额外的工作,除非你指定一个模板,或者需要使用build立在模板上的东西,比如迭代一个IEnumerable<T> 。 创build模板非常简单,并且可以提供很大的灵活性。 在您的视图文件夹中为当前控制器(或共享视图文件夹)创build一个名为DisplayTemplates文件夹。 在该文件夹中,使用要为其构build模板的模型types添加部分视图。 在这种情况下,我添加/Views/Shared/DisplayTemplates并添加了一个名为ShortDateTime.cshtml的部分视图。

 @model System.DateTime @Model.ToShortDateString() 

现在,您可以使用以下行来调用该模板:

 @Html.DisplayFor(m => m.MyDateTime, "ShortDateTime") 

你可以使用[DisplayFormat]属性来修饰你的视图模型属性:

 [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime MyDateTime { get; set; } 

并在你看来:

 @Html.EditorFor(x => x.MyDate) 

或者,为了显示该值,

 @Html.DisplayFor(x => x.MyDate) 

另一种我不推荐的方法是使用弱types的帮手:

 @Html.TextBox("MyDate", Model.MyDate.ToLongDateString()) 

模型内部简单的格式化输出

 @String.Format("{0:d}", model.CreatedOn) 

或者在foreach循环中

 @String.Format("{0:d}", item.CreatedOn) 

我使用以下方法来内联格式并显示模型中的date属性。

 @Html.ValueFor(model => model.MyDateTime, "{0:dd/MM/yyyy}") 

否则,在填充文本框或编辑器时,您可以像@Darinbuild议的那样做,使用[DisplayFormat]属性修饰属性。

如果所有的DateTimetypes都以相同的方式呈现,则可以使用自定义的DateTime显示模板。

在您的视图文件夹中创build一个名为“DisplayTemplates”在您的控制器特定的视图文件夹,或在“共享”文件夹(这些工作类似于偏见)下的文件夹。

在里面创build一个名为DateTime.cshtml的文件,它将DateTime作为@model并且代码如何呈现date:

 @model System.DateTime @Model.ToLongDateString() 

现在你可以在你的意见中使用它,它应该工作:

 @Html.DisplayFor(mod => mod.MyDateTime) 

只要按照惯例将其添加到“DisplayTemplates”文件夹中,并命名该文件以匹配您所显示的types,MVC将自动使用该文件显示您的值。 这也适用于使用“EditorTemplates”编辑场景。

以下是关于模板的更多信息 。

我的首选是保持格式的细节与视图,而不是视图模型。 所以在MVC4 / Razor中:

 @Html.TextBoxFor(model => model.DateTime, "{0:d}"); 

date时间格式参考: http : //msdn.microsoft.com/en-us/library/az4se3k1( v=vs.71) .aspx

然后我有一个JQuerydateselect器绑定到它,并把date作为一个不同的格式… doh!

看起来像我需要将datepicker的格式设置为相同的格式。

所以我将System.Globalization格式存储在data- *属性中,并在设置时收集它

 @Html.TextBoxFor( model => model.DateTime.Date, "{0:d}", new { @class = "datePicker", @data_date_format=System.Globalization.CultureInfo .CurrentUICulture.DateTimeFormat.ShortDatePattern })); 

这里的糟糕的部分:.net和datepicker的格式不匹配,所以需要hackery:

 $('.datePicker').each(function(){ $(this).datepicker({ dateFormat:$(this).data("dateFormat").toLowerCase().replace("yyyy","yy") }); }); 

这有点弱,但应该涵盖很多案例。

为我工作

 <%=Model.MyDateTime.ToString("dd-MMM-yyyy")%> 

最近有同样的问题。

我发现在模型中简单地将DataType定义为Date也是可行的 (使用Code First方法)

 [DataType(DataType.Date)] public DateTime Added { get; set; } 

如果我只是想以短格式显示date,我只是使用@ Model.date.ToShortDateString(),它打印date

如果您只想以特定的格式显示date,请致电:

 @Model.LeadDate.ToString("dd-MMM-yyyy") @Model.LeadDate.ToString("MM/dd/yy") 

这将导致以下格式,

 26-Apr-2013 04/26/13 

这将在您的视图中以dd/MM/yyyy格式显示

在视图中:

而不是DisplayFor使用此代码

 <td> @(item.Startdate.HasValue ? item.Startdate.Value.ToString("dd/MM/yyyy") : "Date is Empty") </td 

它还检查date列中的值是否为空,如果为true,那么它将显示date为空或来自列的实际格式化date。

希望有助于某人。

 @{ string datein = Convert.ToDateTime(item.InDate).ToString("dd/MM/yyyy"); @datein } 

在MVC5中,我会使用,如果你的模型是date时间

 string dt = Model.ToString("dd/MM/yyy"); 

或者如果你的模型包含date时间的属性

 string dt = Model.dateinModel.ToString("dd/MM/yyy"); 

格式的官方含义如下:

https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

你可以这样做@ item.Date.Value.Tostring(“dd-MMM-yy”);

只有查看文件像这样调整。 你可以试试这个。

 @Html.FormatValue( (object)Convert.ChangeType(item.transdate, typeof(object)), "{0: yyyy-MM-dd}") 

item.transdate它是你的DateTimetypes数据。