MVC 脚手架模板使用不同于标准 ASP.NET MVC 模板工作方式的 Visual Studio 对象模型。Model.ViewDataType 是 Visual Studio EnvDTE.CodeType类而不是Type类。EnvDTE.CodeType 具有可用于获取显示名称的 attributes 属性。
下面是一些示例代码,可用于从 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()的调用。我还删除了“ <#= viewDataType.Name #> ”周围的引号,因为 T4 模板会围绕从<#= GetDisplayName(viewDataType) #>返回的结果生成引号。
<# 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";
}