0

在我的 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>
}

有没有办法做到这一点?

4

2 回答 2

0

You can define an empty template for null fields :

//EmptyTemplate.cshtml
@(Model == null ? "NULL" : Model)

And call it in your DisplayFor method :

@Html.DisplayFor(model => item.RegisterDate, "EmptyTemplate")
于 2013-11-08T08:42:46.360 回答
0

DisplayTemplates并且EditorTemplates必须根据模型类型的名称命名(MyClass模型需要MyClass.cshtmlas DisplayTemplate)。尽管您不能在文件名中添加?或添加,但它对可为空类型的工作方式相同。在名为 的文件夹中<>创建一个:DisplayTemplateViews\Shared\DisplayTemplatesDateTime.cshtml

@model DateTime?

@(Model.HasValue ? string.Format("{0:yyyy-MM-dd}", Model.Value) : "date is not provided")

它可以像这样在您的视图中使用:

@Html.DisplayFor(model => item.RegisterDate)

您不必指定模板的名称,它会按照约定找到。

于 2013-11-08T09:12:24.503 回答