2016-12-12 9 views
0

私はUmbraco v7サイトを約3年間稼働させています。従来、私はコントローラを使用してページをレンダリングしていませんでしたが、私はPOSTフォームにいくつかのコントローラを設定しましたが、それはそれです。私の既存のビューページにはロジックが組み込まれており、コントローラの代わりに外部ヘルパーメソッドが使用されています。Umbracoをコントローラのレンダリングする方法

私は新しいページを開発しようとしており、これがより良いデザインパターンをテストするための私の時間だと思っていました。このページは、コントローラーからのデータのレンダリングだけでなく、コントローラーを介した必要なフォームの提出も行います。既存のビューページでリファクタリングを行うことにした場合、スムーズに進む最善のルートは何ですか?

レンダリングコントローラと一緒に行った場合、私のルーティングは変わらないと私は理解していますが、サーフェスと一緒に行くと特別なルーティングが必要でしょうか?

レンダリングコントローラを使用した場合、これはフォームの送信をサポートしていませんか?

他に何が足りないのですか?

おかげで再び、 デヴィン

答えて

2

は、あなたは特別なルーティングを設定する必要はありません - すべては右Umbracoにして焼成します。

バックグラウンドコントローラは再利用可能なアクションに最適ですが、カスタムコントローラ(ルートハイジャック)は、Umbracoのページ全体(ドキュメントタイプ/テンプレート)にカスタムロジックを追加するのに適しています。

どちらの方法でも同じ結果が得られます。その違いは抽象だけです。

表面コントローラUmbraco.Web.Mvc.SurfaceControllerから継承MVC Child Actionsある - これは役に立ちUmbraco特定のプロパティとメソッドを追加します。

サーフェスコントローラは、フォームのような再利用可能なものを作成するのに適しています。 documentation hereをご覧ください。

あなたはページがそれはあなたがこのようUmbraco.Web.Mvc.RenderMvcControllerから継承よりも、独自のコントローラを作成してこれを行うにはルートハイジャック

と呼ばれていますレンダリングされている方法を変更するカスタムコントローラを使用します。

public class HomeController : Umbraco.Web.Mvc.RenderMvcController 
{ 
    public ActionResult MobileHomePage(RenderModel model) 
    { 
     //Do some stuff here, the return the base Index method 
     return base.Index(model); 
    } 
} 

これは、 「ホーム」ドキュメントタイプ用のカスタムコントローラ。もちろん、独自のプロパティとメソッドでRenderModelから継承したカスタムモデルを返すこともできます。

フルラの例およびdocumentation can be found here

表面コントローラー:

public class YourSurfaceController: SurfaceController 
{ 
    public ActionResult YourAction() 
    { 
     // Do stuff 
    } 

    [HttpPost] 
    public ActionResult YourAction() 
    { 
     // Do stuff on POST 
    } 
} 

コントローラールートのハイジャックについて:

ポストは両方のオプションを使用すると、そのような[httppost]属性を追加することにより、POSTリクエストを処理することができ

を要求します

public class HomeController : Umbraco.Web.Mvc.RenderMvcController 
{ 
    public ActionResult MobileHomePage(RenderModel model) 
    { 
     //Do some stuff here, the return the base Index method 
     return base.Index(model); 
    } 

    [HttpPost] 
    public ActionResult MobileHomePage(RenderModel model) 
    { 
     //Do some stuff on POST, the return the base Index method 
     return base.Index(model); 
    } 
} 
+0

いくつかのフォローアップの質問:サーフェスコントローラは、MVCチャイルドアクションのレンダリングやフォームデータの送信の処理に使用されます。つまり、通常のビューページのレンダリングには使用できません。サーフェスコントローラは通常のビューページをレンダリングできません。 –

+0

Surfaceコントローラがルーティングを必要とするのはなぜですか?フォーム送信のためのSurfaceコントローラはルーティングを必要としますが、Child Action Surface Controllersについてはどうでしょうか?なぜルーティングが必要なのでしょうか? –

+0

@DevinGleasonLambert私はあなたが「ルーティング」とは何か混乱しているかもしれないと思います。ルーティングとは、ASP.NET MVCで特定のURL(またはルート)にアクセスしたときの処理(つまり、使用されているコントローラ)を設定することです。あなたの質問に関して、Umbracoはすでにすべてのルーティングを処理しています。対応するコントローラを追加するだけです。 –

関連する問題