6

MVC 4 と Umbraco CMS がインストールされているプロジェクトに取り組んでいます。申し訳ありませんが、初心者なので、私の質問は奇妙かもしれません。

私の質問は、Umbraco のバック オフィスで管理したくない型をどのように処理するかということです。むしろ、単純なデータが SQL Server に格納されます。

具体的に聞きたいのは:

  • MVC でコントローラーを作成し、Umbraco をバイパスできますか?
  • どのコントローラーから継承する必要がありますか? それらは標準の MVC コントローラーである必要がありますSurfaceControllerRenderMvcController? 繰り返しますが、これは Umbraco のドキュメント タイプまたはデータではありません。
  • ビューは から継承されますかUmbracoViewPageUmbracoTemplatePageそれとも標準の MVC ビューにすることができますか?
  • これらのビュー、コントローラー、およびアクションの URL はどのように変更されますか? Umbraco では、URL はコンテンツ ツリーに依存しますが、Umbraco 以外のコントローラー、ビュー、およびアクションではどのようになりますか?

あなたの貴重な時間、指導、共有、そして助けに感謝します。とても感謝しています。

4

1 に答える 1

15

あなたはここでさまざまな質問をしています。

umbraco Umbraco で開発する場合、Web サイトに外部データを埋め込むことは珍しくありません。プレーンな .Net プロジェクトで使用する (ほぼ) あらゆる種類のデータアクセスを使用できることを既に説明した場合。

umbraco コンテキストを失わないでください

外部データ (例) 製品を取り込むときは、 umbraco コンテキストを失わないことが重要です。レンダリングするブレッドクラム、アクティブなメニューを設定するための css クラスなどはまだあります。あなたの「外部データ」はおそらくノードの下に属しています。そのため、標準 MVC コントローラーを使用するのはお勧めできません。

汚れたカミソリ

ビューはかみそりにあるため、外部データのすべての抽出をビューの @{ ... } に入れることができます。経験豊富なプログラマーでなくても、これで問題ありません。保守性と DRY 原則に関するトピックには疑問がありますが :-)

RenderMvcController と SurfaceController の比較

RenderMvcControllerを使用する場合、基本的には特定のドキュメント タイプのコントローラーを作成しています。umbraco がこのドキュメント タイプのノードをレンダリングするたびに。このコントローラーが呼び出され、レンダリングしたモデルがビューに送り返されます。ご想像のとおり、これはデータを抽出してビューにプッシュするための私のお気に入りの場所の 1 つです。一方、サーフェス コントローラーは部分ビュー用のコントローラーであり、フォーム ポストバックの処理に非常に適しています。これらのコントローラーはどちらも、バックエンドではなく、Web サイトのフロントエンドに使用できます。

あなたの意見を継承する

ビューを使用して、必要なことを行うことができます。ただし、UmbracoViewPage からビューを継承する場合でも@Umbraco.Whatever、ビューで利用可能なすべての機能を利用できます。

あなたのURLは同じままです

RenderMvcController を使用してルートを「ハイジャック」するため、umbraco バックエンドを信頼して正しい URL にアクセスできます。クエリ文字列を使用して、必要な外部データを取得できます。

その他のコントローラーまたはメソッド

上記のコントローラーを使用できない場合は、IPublishedContent に extensionMethod を作成することがあります。そのように、私は次のようなコードを書くことができます:

foreach (var myObj in Model.Content.GetMyExternalData()) {
   // do stuff
}

(webApi ラッパーを使用して) データを公開する必要がある場合は、UmbracoApiControllerを試してください。このRESTピュアが歌いました。

umbraco でのデータ アクセス

Umbraco は ORM としてpetapocoを使用していることを知っておく必要があります。したがって、それも使用することを検討できます (また、検討する必要があります)。問題なくデータベース接続を再利用できます。

var query = new Sql().Select("*").From("myCustomTable").Where<MyModel>(x => x.Id == id);
return DatabaseContext.Database.Fetch<MyModel>(query).FirstOrDefault();
于 2014-09-12T08:34:02.103 に答える