首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ASP.NET MVC3中以特定格式呈现DateTime?

如何在ASP.NET MVC3中以特定格式呈现DateTime?
EN

Stack Overflow用户
提问于 2011-05-14 19:56:02
回答 15查看 217.1K关注 0票数 119

如果我的模型类中有一个DateTime类型的属性,我如何以特定的格式呈现它-例如,以ToLongDateString()返回的格式呈现它?

我试过了..。

代码语言:javascript
复制
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())

...which会引发异常,因为表达式必须指向属性或字段。还有这个..。

代码语言:javascript
复制
@{var val = item.MyDateTime.ToLongDateString();
  Html.DisplayFor(modelItem => val);
}

...which不会抛出异常,但是呈现的输出是空的(尽管val包含期望值,正如我在调试器中看到的那样)。

谢谢你提前给我提示!

编辑

ToLongDateString只是一个例子。我实际上想使用的是DateTimeDateTime?的自定义扩展方法,而不是ToLongDateString

代码语言:javascript
复制
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参数。

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2011-05-14 20:30:41

如果您想要以特定格式显示日期,只需调用:

代码语言:javascript
复制
@String.Format(myFormat, Model.MyDateTime)

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

代码语言:javascript
复制
@model System.DateTime

@Model.ToShortDateString()

现在,您可以使用下面的代码行调用该模板:

代码语言:javascript
复制
@Html.DisplayFor(m => m.MyDateTime, "ShortDateTime")
票数 161
EN

Stack Overflow用户

发布于 2011-05-14 19:57:51

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

代码语言:javascript
复制
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", 
               ApplyFormatInEditMode = true)]
public DateTime MyDateTime { get; set; }

在你看来:

代码语言:javascript
复制
@Html.EditorFor(x => x.MyDate)

或者,为了显示值,

代码语言:javascript
复制
@Html.DisplayFor(x => x.MyDate)

另一种可能性是,我不推荐使用弱类型的helper:

代码语言:javascript
复制
@Html.TextBox("MyDate", Model.MyDate.ToLongDateString())
票数 175
EN

Stack Overflow用户

发布于 2011-11-07 14:32:41

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

代码语言:javascript
复制
@String.Format("{0:d}", model.CreatedOn)

或者在foreach循环中

代码语言:javascript
复制
@String.Format("{0:d}", item.CreatedOn)
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6001654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档