Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC5中使用Html.DisplayFor()的日期格式_C#_Asp.net Mvc_Datetime_Formatting_Conditional - Fatal编程技术网

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

C# 在MVC5中使用Html.DisplayFor()的日期格式,c#,asp.net-mvc,datetime,formatting,conditional,C#,Asp.net Mvc,Datetime,Formatting,Conditional,参考本文中的答案,我添加了/Views/Shared/DisplayTemplates,并添加了名为ShortDateTime.cshtml的部分视图,如下所示: @model System.DateTime @Model.ToShortDateString() 当模型包含一个值时,此操作有效,并且正确显示格式化日期: @Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime") 但是,如果返回空值,将抛出“System.

参考本文中的答案,我添加了/Views/Shared/DisplayTemplates,并添加了名为ShortDateTime.cshtml的部分视图,如下所示:

@model System.DateTime
@Model.ToShortDateString()
当模型包含一个值时,此操作有效,并且正确显示格式化日期:

@Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime")
但是,如果返回空值,将抛出“System.InvalidOperationException”。表明:

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

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

@Html.DisplayFor(modelItem => item.BirthDate)
但最初的格式问题仍然存在。当我尝试在视图中设置条件格式时,如下所示,它不起作用,但我希望它只是一个语法问题

@Html.DisplayFor(modelItem => item.BirthDate == null) ? string.Empty : (modelItem => item.BirthDate, "ShortDateTime"))
上述结果导致不同的“System.InvalidOperationException”:

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

那么,有没有一种方法可以在视图中进行条件格式设置,以便仅从DateTime值生成日期?

您尝试过这种方法吗

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

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

public DateTime? BirthDate{ get; set; }
你一定已经声明

public DateTime BirthDate{ get; set; }
这将期望每次都有一个值


如果设置为可空,则不需要值。

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

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

希望这能有所帮助。

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

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

遗憾的是System.DateTime不包含HasValue.Greg的定义,请注意,我将模型类型更改为可为空的DateTime或
DateTime?
。这就是
HasValue
方法的来源。另外,我应该提到可为null的DateTime模型类型能够接收不可为null的DateTime。因此,无需创建另一个版本的局部视图来处理不可为空的日期时间值。最后,我昨晚设置了一个小测试,以确保我上面给出的代码是正确的和功能性的。如果将代码粘贴到ShortDateTime部分视图中,您应该立即停止接收最初报告的错误。从那里,您可以修改日期时间的格式,方法是将
ToSortDateString()
替换为您喜欢的任何格式。@Vinney的答案对我很有用,应该标记为答案。谢谢,@WalterdeJong!我赞成。:)虽然不太管用,但确实让我走上了正确的道路,这只是一个语法问题,如下所示。谢谢。谢谢,但是这些字段是EF生成的代码,重新生成会带来额外的维护。是的,我想我可以用部分课程,但有时你只需要让她完成。