在t4模板中检测类继承

3

你能在 t4 模板中检测到类的继承属性吗?

我有两个类,如下所示:

public class User : ManagedRecord
{
   public int UserId { get; set;}
   public string UserName { get; set;}
}

public abstract class ManagedRecord
{
   public int Deleted { get; set;}
   public DateTime CreatedDate { get; set;}
}

当t4模板基于User创建字段时,它将首先放置ManagedRecord字段,然后是User字段。

有没有一种方法可以检测继承的类字段,以便我可以以不同的方式处理它们?

t4模板用于ASP.NET MVC 5编辑页面模板,根据使用的类创建表单字段。

t4代码如下:

<#@ template language="C#" HostSpecific="True" #>
<#@ output extension=".cshtml" #>
<#@ include file="Imports.include.t4" #>
@model <#= ViewDataTypeName #>
<#
    string boolType = "System.Boolean";
    int tabIndex = 1;
    bool autofocus = true;
    Version requiredMvcVersion = new Version("5.1.0.0");
    bool isControlHtmlAttributesSupported = MvcVersion >= requiredMvcVersion;


foreach (PropertyMetadata property in ModelMetadata.Properties) {
if (property.Scaffold && !property.IsAssociation) {
#>
    @Html.EditorFor(model => model.<#= property.PropertyName #>)
<#
}
#>

3
"T4 模板基于用户创建字段",是指哪个 T4 模板?你没有展示任何关于你的T4模板的代码。 - Evk
@Evk 这是一个MVC编辑页面模板。我可以添加该模板的代码,但我也愿意将该代码塑造成任何能够让我以不同方式处理继承字段的形式。 - AnotherDeveloper
1个回答

2

我发现了一个适用于我的情况的解决方案。你可以使用修饰符来表示你不想在表格中显示该列。

using System.ComponentModel.DataAnnotations;
namespace YourNameSpace
{
    public abstract class ManagedRecord
    {
        [ScaffoldColumn(false)]
        public DateTime CreatedDate{ get; set; }

        [ScaffoldColumn(false)]
        public bool Deleted { get; set; }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接