在替代视图中嵌入字段

Embedding a field in an alternate view

我正在为将显示 table 个字段的自定义类型构建备用视图。大多数字段可以使用类似这样的方式显示:

@Display(Model.ContentItem.CustomType.CustomField.Value)

但是,我希望有一些字段具有完整的字段视图。例如,IP 地址字段显示对地址执行 ping 操作的结果以及字段值本身。

我发现可以使用以下方式显示此形状:

@Display.Fields_CustomField(Model.ContentItem.CustomType.Address)

但是该调用导致模型值与通过驱动程序显示时不同,例如需要调用 Model.ContentField.Value 而不是 Model.Value。

var model = Model.ContentField ?? Model;
var settings = Model.Settings ?? Model.PartFieldDefinition.Settings;

然后是更复杂的检查:

bool customFieldSetting = settings.GetType() == typeof(CustomFieldSettings) ? 
    settings.CustomSetting : 
    bool.Parse(settings["CustomFieldSettings.CustomSetting"]);

我的自定义字段可以重写以检查这些值的多个位置,但是当必须使用此逻辑更改许多字段时,这是一个不方便的解决方案。

有没有办法从形状替代中呈现字段的完整显示?

我猜你显示的是 table 个内容项?我想说最简单的方法是将所有字段发送到它们自己的区域。所以在你的替代类型中有这样的东西:

  <tr>
    <td>@Display(Model.Column1)</td>
    <td>@Display(Model.Column2)</td>
  </tr>

并有这样的展示位置:

<Place Fields_Text-FirstName="Column1:1"
    Fields_Text-LastName="Column2:1" />

您可以考虑的另一个选项是使用您自己的自定义实现来超越区域的呈现,并在每个呈现的形状之间添加您的 table 列标记