在我的MVC视图中,我需要在模型对象中显示值。
@model List<School.Model.Student_Model>
在表格中,我显示了这些学生数据。
@foreach (var item in Model)
{
<tr>
...
<td>@Html.DisplayFor(model => item.RegisterDate)</td>
</tr>
}
RegisterDate可以为DateTime?
在我的表格中,如果RegisterDate为空,我希望显示消息“日期未提供”。
<td>@Html.DisplayFor(model => item.RegisterDate.HasValue?item.RegisterDate.HasValue.ToString():"-")</td>
如果我在上面使用它会给我以下错误
异常详细信息:System.InvalidOperationException:模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。
如果我使用单独的If- else条件,我将能够这样做。
@if(item.RegisterDate.HasValue)
{
<td>@Html.DisplayFor(model => item.RegisterDate)</td>
}
else
{
<td>date is not provided</td>
}
有没有办法做到这一点?
答案 0 :(得分:0)
您可以为空字段定义空模板:
//EmptyTemplate.cshtml
@(Model == null ? "NULL" : Model)
并在你的DisplayFor方法中调用它:
@Html.DisplayFor(model => item.RegisterDate, "EmptyTemplate")
答案 1 :(得分:0)
DisplayTemplates
和EditorTemplates
(MyClass
模型需要MyClass.cshtml
作为DisplayTemplate
)。虽然您无法在文件名中添加?
或<>
,但它对可空类型的工作方式相同。在名为DisplayTemplate
的{{1}}文件夹中创建Views\Shared\DisplayTemplates
:
DateTime.cshtml
它可以在您的视图中使用,如下所示:
@model DateTime?
@(Model.HasValue ? string.Format("{0:yyyy-MM-dd}", Model.Value) : "date is not provided")
您不必指定模板的名称,它将按惯例找到。