0

私の MVC ビューでは、モデル オブジェクトに値を表示する必要があります。

@model List<School.Model.Student_Model>

表に、それらの学生データを表示しています。

@foreach (var item in Model)
{
    <tr>
        ...
        <td>@Html.DisplayFor(model => item.RegisterDate)</td>
    </tr>            
}

RegisterDate は null 可能ですDateTime?

私のテーブルでは 、RegisterDate が null の場合、「日付が指定されていません」というメッセージを表示したいと考えています。

<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

DisplayTemplatesEditorTemplatesモデル タイプの名前に基づいて名前を付ける必要があります (モデルにはasMyClassが必要です)。ファイル名にorを追加することはできませんが、null 許容型でも同じように機能します。という名前のフォルダに を作成します。MyClass.cshtmlDisplayTemplate?<>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 に答える