获取 Content-Type 字段标签的最佳、更好或更简单的方法

Best, Better, or Simpler Way to Get the Label for a Content-Type's Field

我以为我在做一些简单的事情,但它变得如此复杂以至于我觉得我错过了什么。我们有一个在工作流程中移动的 Content-Type (CT)。在工作流的每个阶段,输出会更改哪些字段可见。

我们希望轻松访问记录的值和标签。换句话说,假设我们有一个名为 EventInstance 的 CT,其中一个字段是 Url。所以在代码中我们通常只做 @Content.Url。但是,对于 table 标题(以及其他输出),我们希望显示“网站 Link (Url)”而不是“Url”。所以在CT中我们简单的改了Name*(Label):

然后我开始寻找如何获取“标签”字段 (2) 而不是名称 (1)。我想到的是这个。但这似乎非常复杂...

  public string GetLabelForField(dynamic de, string fieldName)
  {
    var attributes = AsEntity(de).Type.Attributes as IEnumerable<IContentTypeAttribute>;
    return attributes.First(t => t.Name == fieldName).Metadata.GetBestValue<string>("Name", "@All");
  }

我这样称呼它

  var ev = listEvent.First();

<pre>
help.GetLabelForField(ev): @help.GetLabelForField(ev, "Url")
</pre>

然后输出我想要的:

help.GetLabelForField: Website Link (Url)

我意识到我应该感到满意,因为它有效,但似乎需要大量工作 并且学习曲线陡峭 。有没有更好的方法来访问这个(看似常见)属性?

这些 API 的文档记录不多,因为访问 Edit-UI 中使用的 input-field 配置并不常见。

但是:我相信你也可以这样做(更短,但可能不完美):

  var attribute = AsEntity(de).Type[fieldName];
  var name = attribute.Metadata.GetBestValue<string>("Name");