首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Html.DisplayFor()在MVC5中的数据格式

Html.DisplayFor()在MVC5中的数据格式
EN

Stack Overflow用户
提问于 2013-11-12 03:58:29
回答 4查看 28.1K关注 0票数 6

引用此post中的答案,我添加了/ view /Shared/DisplayTemplate,并添加了一个名为ShortDateTime.cshtml的部分视图,如下所示:

代码语言:javascript
运行
复制
@model System.DateTime
@Model.ToShortDateString()

当模型包含一个值时,此操作并正确显示格式化日期:

代码语言:javascript
运行
复制
@Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime")

但是,如果返回空值,则抛出“System.InvalidOperationException”。表示:

{“传递到字典中的模型项为空,但此字典需要类型为‘System.DateTime’的非空模型项”}。

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

代码语言:javascript
运行
复制
@Html.DisplayFor(modelItem => item.BirthDate)

但最初的格式化问题仍然存在。当我试图按下面的方式在视图中放置条件格式时,它不起作用,但我希望它只是一个语法问题。

代码语言:javascript
运行
复制
@Html.DisplayFor(modelItem => item.BirthDate == null) ? string.Empty : (modelItem => item.BirthDate, "ShortDateTime"))

以上结果会产生一个不同的“System.InvalidOperationException”:

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

那么,是否有一种方法可以在视图中进行条件格式化,从而只从DateTime值生成日期?

EN

回答 4

Stack Overflow用户

发布于 2013-11-12 04:31:17

您正在经历的问题是,您正在将一个null值传递到一个非空模型中。将部分视图的模型更改为DateTime?。例如:

代码语言:javascript
运行
复制
@model DateTime?          
@if (!Model.HasValue)
    {
    <text></text>
}
else
{
    @Model.Value.ToShortDateString()
}

希望这能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2013-11-12 04:07:15

你试过这个吗?

代码语言:javascript
运行
复制
@if (modelItem.BirthDate != null) { Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime") }
票数 1
EN

Stack Overflow用户

发布于 2013-11-12 04:16:53

我想您应该在模型类中将BirthDate属性声明为可空。

代码语言:javascript
运行
复制
public DateTime? BirthDate{ get; set; }

你必须宣布

代码语言:javascript
运行
复制
public DateTime BirthDate{ get; set; }

这意味着每次都会有一个值。

如果您将其设置为可空,它将不会期望一个值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19920603

复制
相关文章

相似问题

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