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

我试过这个...

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

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

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

...这不会引发异常,但呈现的输出为空(尽管val包含预期值,正如我在调试器中看到的).

提前谢谢你的提示!

Edit

ToLongDateString只是一个例子.我实际上想用DateTimeDateTime?的自定义扩展方法来代替ToLongDateString:

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参数.

推荐答案

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

@String.Format(myFormat, Model.MyDateTime)

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

@model System.DateTime

@Model.ToShortDateString()

现在,您可以通过以下行调用该模板:

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

Asp.net相关问答推荐

ASP.NET MVC项目中的产品采购并发性测试

域名 + 子域名在IIS部署

从组件属性调用异步方法的正确方法

如何正确配置 IHttpModule?

Firefox 和 Chrome 之间 1 像素的行高差

业务逻辑中的实体框架最佳实践?

即使使用正确的 Accepts 标头,WebAPI 也不会返回 XML

如何使图像的一部分成为可点击的链接

返回值使用 String result=Command.ExecuteScalar() 结果返回 null 时发生错误

如何配置 ASP.NET Core 1.0 以使用本地 IIS 而不是 IIS Express?

尽管安装了 AspNetCoreModule,但在 IIS 中运行 ASP.NET Core 应用程序时出现 0x8007000d 错误 500.19

如何验证文件上传的文件类型?

MVC5 身份验证中的......与主域之间的信任关系失败

设置 Response.Status 生成HTTP 状态字符串无效异常

如何获取程序集的最后修改日期?

Twitter Bootstrap 和 ASP.NET GridView

在 Application_BeginRequest 中设置会话变量

如何遍历自定义 vb.net 对象的每个属性?

在 Asp.Net MVC 5 中获取登录用户的用户 ID

如何使 URL 重写与 web.Release.config 转换一起工作?