2016-06-28 10 views
0

現在、私はCMS内にいくつかのカスタムページタイプを持っています。ドキュメントを操作する際に型の安全性を確保するため、組み込みのコードジェネレータを使用して各ページタイプのクラスを作成しました。 2つのクラスを生成たとえば、私はホワイトペーパーとKenticoコードジェネレータと呼ばれるページの種類を持っている:現在のドキュメントにカスタムページタイプクラスを使用する方法

public partial class Whitepaper : TreeNode { } 

public partial class WhitepaperProvider { } 

私は直接のようなプロバイダを使用して特定の文書を照会していた場合、これらのクラスは素晴らしい仕事:

WhitepaperProvider.GetWhitepapers().TopN(10); 

しかし、WhitepaperProviderを使用してドキュメントを再クエリすることなく、現在のドキュメントにWhitepaperクラスを使用できるようにします。どのように私は、現在のドキュメントのための私のカスタムページ・タイプのクラスを使用します

// This is what I'm using 
TreeNode currentDocument = DocumentContext.CurrentDocument; 
var summary = currentDocument.GetStringValue("Summary", string.Empty); 

// This is what I'd like to use, because I know the template is for whitepapers 
Whitepaper currentWhitepaperDocument = // what goes here? 
summary = currentWhitepaperDocument.Summary; 

:?この場合、私は、ホワイトペーパーのカスタムページテンプレートを持っており、背後にあるコードで、私はそれのためにカスタムクラスを使用できるようにしたいですか


UPDATE

答えている限り、クラスが現在のページタイプに対して登録されているようas作品を使用して言及しています。私はDocumentContext.CurrentDocumentが常にTreeNodeを返すと仮定しているので、これはうまく動作するとは思っていませんでした(したがって、あなたはcontravarianceの問題があります)。ページタイプにクラスが登録されている場合は、代わりにそのクラスのインスタンスが返され、asを使用できるようになります。

+0

は、あなたのカスタムクラスとして現在の文書をキャストしようとしたことがあり?:ホワイトペーパーcurrentWhitepaperDocument = DocumentContext。 WhitepaperとしてCurrentDocument –

答えて

1

は同じくらい簡単であるべき...

var stronglyTyped = DocumentContext.CurrentDocument as Whitepaper 

...を使用してドキュメントタイプとしてホワイトペーパークラスを登録している場合例えばCMSModuleLoader上属性:

[DocumentType("WhitepaperClassName", typeof(Namespace.To.Whitepaper))] 

これは強く型付けされたページタイプのオブジェクトをアップ配線についての良いブログ記事です:http://johnnycode.com/2013/07/15/using-strongly-typed-custom-document-type-classes/

+0

これは間違いなく私はそれを期待していない動作します。 DocumentContext.CurrentDocumentは常にTreeNodeを返すと仮定しましたが、ページタイプのクラスが登録されていれば、自動的にそのクラスが返されます。私は私のポストを更新し、ありがとう! – KingOfTheWood

0

あなたは(元のための部分的に作成、生成されたファイルを変更しないでください)あなたのパーシャルクラスを拡張することができ、例:

public partial class Whitepaper 
{ 
    public Whitepaper CreateFromNode(TreeNode node) 
    { 
     //You should choose all necessary params in CopyNodeDataSettings contructor 
     node.CopyDataTo(this, new CopyNodeDataSettings()); 
     //You should populate custom properties in method above. 
     //this.Status = ValidationHelper.GetString(node["Status"], ""); 
     return this; 
    } 
} 

はそれを使用する方法:

new Whitepaper().CreateFromNode(DocumentContext.CurrentDocument) 
関連する問題