2017-09-11 6 views
0

Je suis en train de créer une autre vue pour un type personnalisé qui affichera une table de champs. La plupart des champs peuvent être affichés en utilisant quelque chose comme ceci:Incorporation d'un champ dans une autre vue

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

Cependant, quelques-uns des champs que je préférerais avoir la vue complète du champ. Par exemple, un champ d'adresse IP qui affiche le résultat du ping de l'adresse à côté de la valeur du champ lui-même.

Je trouve que cette forme peut être affiché à l'aide:

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

mais alors que les résultats d'appel dans les valeurs du modèle étant différent lorsqu'il est affiché par le conducteur, comme le besoin d'appeler Model.ContentField.Value au lieu de Model.Value.

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

et même des contrôles plus complexes:

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

Mon champ personnalisé peut être réécrite pour vérifier plusieurs emplacements pour ces valeurs, mais c'est une solution peu pratique lorsqu'il faut modifier de nombreux domaines avec cette logique.

Existe-t-il un moyen de rendre l'affichage complet d'un champ à partir d'une forme alternative?

Répondre

1

Je suppose que vous affichez une table des éléments de contenu alors? Je dirais que la façon la plus simple de le faire est d'envoyer tous les champs dans leurs propres zones. Donc, dans votre type alternatif quelque chose comme ceci:

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

et un placement comme celui-ci:

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

Une autre option que vous pouvez regarder dans est de dépasser le rendu de la zone avec votre propre implémentation personnalisée et ajouter votre balisage de colonne de table entre chaque forme rendue

+0

Je ne savais pas que vous pourriez définir le placement spécifiquement. Comment est défini quelque chose comme Column1? – ub3rman123

+0

Il n'y a pas de définition réelle, il vous suffit d'afficher la forme Column1 – Hazza

+1

Cela pourrait aider http://arkleseizure.net/what-the-hell-is-an-item-template – Hazza