は、あなたは特別なルーティングを設定する必要はありません - すべては右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);
}
}
いくつかのフォローアップの質問:サーフェスコントローラは、MVCチャイルドアクションのレンダリングやフォームデータの送信の処理に使用されます。つまり、通常のビューページのレンダリングには使用できません。サーフェスコントローラは通常のビューページをレンダリングできません。 –
Surfaceコントローラがルーティングを必要とするのはなぜですか?フォーム送信のためのSurfaceコントローラはルーティングを必要としますが、Child Action Surface Controllersについてはどうでしょうか?なぜルーティングが必要なのでしょうか? –
@DevinGleasonLambert私はあなたが「ルーティング」とは何か混乱しているかもしれないと思います。ルーティングとは、ASP.NET MVCで特定のURL(またはルート)にアクセスしたときの処理(つまり、使用されているコントローラ)を設定することです。あなたの質問に関して、Umbracoはすでにすべてのルーティングを処理しています。対応するコントローラを追加するだけです。 –