2

場所と呼ばれる分類フィールドの 1 つの別のビューを使用するために、シェイプ トレーサーを使用しています。ただし、他の形状とは異なり、この場合の要約または詳細では、代替は異なる表示タイプのオプションを提供しません。したがって、1 を変更すると、もう 1 つが変更されます。私はそれらを独立して行うことができる必要があります。

以下の Fields.Contrib.TaxonomyField-Location.cshtmlを参照してビューを作成しましたが、表示タイプが詳細または要約の場合、これは同じようにレンダリングされます。

これを克服する方法を教えてください。

ありがとうジョン

4

1 に答える 1

4

私は少し前に同じ問題を抱えていましたShapeDisplayEventsクラスを実装することで、独自の代替を提供できます。

コンテンツ タイプ、表示タイプ、またはその両方に基づいて代替を提供する実装を次に示します。

public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
    public override void Displaying(ShapeDisplayingContext context) {
        context.ShapeMetadata.OnDisplaying(displayedContext => {
            var shapeType = displayedContext.ShapeMetadata.Type;
            var contentItem = displayedContext.Shape.ContentItem;
            var displayType = displayedContext.ShapeMetadata.DisplayType;
            var contentType = contentItem.ContentType;
            displayedContext.ShapeMetadata.Alternates.Add(
                String.Format("{0}__{1}", shapeType, displayType));
            displayedContext.ShapeMetadata.Alternates.Add(
                String.Format("{0}__{1}__{2}", shapeType, (string)contentType, displayType));
            });
    }
}

次のように、形状トレーサーにいくつかの追加の代替が表示されることになります。

ここに画像の説明を入力

そして、代替の名前付きなどを使用できるFields.Contrib.TaxonomyField-Location-SummaryようFields.Contrib.TaxonomyField-Location-Detailになりました。このクラスを拡張して、必要な代替を追加できます。

編集

フィールド名を簡単に取得できないとは思いませんでした。次のようなことを試してみてくださいUrlAlternatesFactory。つまり、既存の代替をループして、それらに displayType を追加します。これにより、フィールド名と表示タイプの両方を含む代替が得られます。

public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
    public override void Displaying(ShapeDisplayingContext context) {
        context.ShapeMetadata.OnDisplaying(displayedContext => {
            var alternates = displayedContext.ShapeMetadata.Alternates.Select(a => a + "__" + displayedContext.ShapeMetadata.DisplayType);
            displayedContext.ShapeMetadata.Alternates = displayedContext.ShapeMetadata.Alternates.Union(alternates).ToList();
        });
    }
}
于 2013-02-05T12:58:28.340 に答える