繁体   English   中英

在MVC5中使用Html.DisplayFor()的日期格式

[英]Date Format using Html.DisplayFor() in MVC5

在这篇文章中引用了答案,我添加了/ Views / Shared / DisplayTemplates并添加了一个名为ShortDateTime.cshtml的局部视图,如下所示:

@model System.DateTime
@Model.ToShortDateString()

当模型包含一个值时,它可以正常显示格式化的日期:

@Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime")

但是,如果返回null值,则抛出'System.InvalidOperationException'。 指示:

{“传入字典的模型项为null,但此字典需要一个类型为'System.DateTime'的非空模型项。”}

我的第一个倾向是在局部视图中使用if语句,但似乎并不重要。 在不引用模板的情况下,空值的处理方式如下:

@Html.DisplayFor(modelItem => item.BirthDate)

但原始的格式问题仍然存在。 当我尝试在视图中放置条件格式如下时,它不起作用,但我希望它只是一个语法的东西。

@Html.DisplayFor(modelItem => item.BirthDate == null) ? string.Empty : (modelItem => item.BirthDate, "ShortDateTime"))

上面的结果是'System.InvalidOperationException':

{“模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。”}

那么,有没有办法在视图中进行条件格式化以仅从DateTime值生成日期?

您遇到的问题是您将null值传递给非可空模型。 将局部视图的模型更改为DateTime? 例如:

@model DateTime?          
@if (!Model.HasValue)
    {
    <text></text>
}
else
{
    @Model.Value.ToShortDateString()
}

希望这可以帮助。

你试过这个吗?

@if (modelItem.BirthDate != null) { Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime") }

我想你应该将BirthDate属性声明为模型类中的可空

public DateTime? BirthDate{ get; set; }

你必须声明为

public DateTime BirthDate{ get; set; }

这将期望每次都有价值。

如果你设置为可空,它将不会期望值。

通过在Html帮助器之前应用条件语句,只传递非空值。

@if (item.BirthDate != null) { @Html.DisplayFor(modelItem => item.BirthDate , "ShortDateTime")}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM