MVC スキャフォールディングテンプレートは、標準の ASP.NET MVC テンプレートの動作とは異なる Visual Studio オブジェクト モデルを使用します。Model.ViewDataType は Visual Studio のEnvDTE.CodeTypeクラスであり、Typeクラスではありません。EnvDTE.CodeType には、表示名を取得するために使用できる属性プロパティがあります。
CodeType から表示名を取得するために使用できるコードの例を次に示します。このコードは、カスタム T4 テンプレート (Index.cs.t4) の最後に配置できます。
<#+
string GetDisplayName(EnvDTE.CodeType type) {
if (type != null) {
foreach (var attribute in type.Attributes.OfType<EnvDTE.CodeAttribute>()) {
if (attribute.Name == "DisplayName") {
return attribute.Value;
}
}
}
return "";
}
#>
次に、カスタム T4 テンプレートで、 viewDataType.NameをGetDisplayName()の呼び出しに置き換えることができます。T4 テンプレートは<#= GetDisplayName(viewDataType) #>から返された結果を囲む引用符を生成するため、" <#= viewDataType.Name #> " を囲む引用符も削除しました。
<# var viewDataType = (EnvDTE.CodeType) Model.ViewDataType; #>
<# if(viewDataType != null) { #>
@model IEnumerable<<#= viewDataType.FullName #>>
<# } #>
@{
ViewBag.Title = <#= GetDisplayName(viewDataType) #>;
<# if (!String.IsNullOrEmpty(Model.Layout)) { #>
Layout = "<#= Model.Layout #>";
<# } #>
}
その後、Index.cshtml ビューを削除し、スキャフォルダーを使用して再度作成すると、ViewBag.Title に設定されている表示名を取得する必要があります。
@{
ViewBag.Title = "Title1";
}