2016-10-19 4 views
0

私はUmbraco 7でモデルビルダーを使用しています(カスタムツールを使用しています)。私はコントローラにモデルを渡す正しい方法が何であるかを知る必要があります。サーフェスコントローラにモデルビルダモデルを与える方法

例えば、私は私のベースページから派生した異なる種類のページを持っていて、それらのすべてのために生成したいコンポーネントを持っています。つまり、画像、テキスト、背景などを持つ大きなボックス

私はそれを私のページの一部として考えました。私はそのためのアクションを書いて、IPageBaseを入力パラメータとして、自分のページでそれを呼び出すことにしました。しかし、明らかに私はそれを行うことはできません。特にモデルビルダーは私のためにパラメータのないコンストラクタを生成しません。私のページごとに部分クラスを追加すると醜いでしょう。

どうすればよいですか?

答えて

3

個人的には、巨大なオブジェクトをより小さいビューモデルに変換し、部分モデルに渡すことを好みますが、部分モデルにページモデルを使用することを望むのであれば、私はモデルをビューモデルに変換したくありません。

@inherits UmbracoTemplatePage<YourModelClass> 

か::、あなたはこのようにそれを渡すことができ

@inherits UmbracoViewPage<YourModelClass> 

してからコントローラがmoとしてIPublishedContent項目(currentPageに)を渡す必要がありますdelを使用して目的のクラスに変換できます。

また、部分/ビュー自体でも行うことができます(特に、ページモデル全体のコンポジションオブジェクトを使用する場合など)。あなたの部分は次のようになります:

@inherits UmbracoTemplatePage 
@{ 
    var seo = new SEO(Model.Content); 
    if (seo != null) 
    { 
     <title>@seo.MetaTitle</title> 
     <meta name="description" content="@seo.MetaDescription"> 
     <meta name="keywords" content="@seo.MetaKeywords"> 
    } 
} 

ここで、SEOは構成文書タイプ/モデルの1つのクラスです。もちろん、コントローラやサービス内でもこのキャスト/作成を実行することができます。これでさらに遊び始めるのを助けてくれることを願っています。

+0

お返事ありがとうございます。私は巨大なものを小さなものに変換するのが好きですが、私の見解ではありません。あなたはどうやってそれをしますか? –

+1

SurfaceControllerでは、UmbracoContextとUmbracoHelperが注入されているので、現在のページの詳細を取得し、viewmodelクラス(新しいYourModelClass(CurrentPage))を構築できます。いくつかのマッパー(たとえば、AutoMapper)を使用して、ページモデルを対応するビューモデルにマッピングすることもできます(命名規則を使用)。 –

+0

良いソリューションをありがとう、本当に好きでした。私はまた、あなたがマクロから来ているならば、あなたが何をするかを知りたい。 –

関連する問題