C# 在备用视图中嵌入字段

C# 在备用视图中嵌入字段,c#,orchardcms,C#,Orchardcms,我正在为自定义类型构建一个备用视图,该视图将显示字段表。大多数字段可以使用如下方式显示: @Display(Model.ContentItem.CustomType.CustomField.Value) <tr> <td>@Display(Model.Column1)</td> <td>@Display(Model.Column2)</td> </tr> <Place Fields_Text

我正在为自定义类型构建一个备用视图,该视图将显示字段表。大多数字段可以使用如下方式显示:

@Display(Model.ContentItem.CustomType.CustomField.Value)
  <tr>
    <td>@Display(Model.Column1)</td>
    <td>@Display(Model.Column2)</td>
  </tr>
<Place Fields_Text-FirstName="Column1:1"
    Fields_Text-LastName="Column2:1" />
但是,我更希望有几个字段具有完整的字段视图。例如,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"]);
我的自定义字段可以重写以检查这些值的多个位置,但当必须使用此逻辑更改许多字段时,这是一个不方便的解决方案


是否有一种方法可以从一个形状替代渲染一个字段的完整显示

我想你是在显示一个目录项目吧?我认为最简单的方法是将所有字段发送到它们自己的区域。因此,在您的备选类型中,有如下内容:

@Display(Model.ContentItem.CustomType.CustomField.Value)
  <tr>
    <td>@Display(Model.Column1)</td>
    <td>@Display(Model.Column2)</td>
  </tr>
<Place Fields_Text-FirstName="Column1:1"
    Fields_Text-LastName="Column2:1" />
有这样一个位置:

@Display(Model.ContentItem.CustomType.CustomField.Value)
  <tr>
    <td>@Display(Model.Column1)</td>
    <td>@Display(Model.Column2)</td>
  </tr>
<Place Fields_Text-FirstName="Column1:1"
    Fields_Text-LastName="Column2:1" />

您可以研究的另一个选项是使用您自己的自定义实现超越区域的渲染,并在渲染的每个形状之间添加表列标记

我不知道您可以专门定义放置。Column1是如何定义的?没有实际的定义,只显示Column1形状。这可能会有所帮助