3

Webフォームで記述された既存のカスタムCMSをMVC4に移植し、理想的にはCMSデータベーススキーマとデータをそのまま維持します。URLを使用して、要求されているページと使用されているテンプレートを判別しています。テンプレートは、主にさまざまなレイアウトとコンテンツの「フィールド」に使用されます。

私のwebformsアプリには、基本クラスがありますPageTemplate : UserControl

default.aspxがあり、リクエストのパスを確認し、dbからプルしてから、TemplateIdプロパティを使用してユーザーコントロールを動的に読み込み、dbコンテンツをプロパティに追加してから、ページのプレースホルダーに追加します。

p = CMSPage.Select(fullPath);
myTemplate = LoadControl("~/templates/template_" + p.TemplateId.ToString + ".ascx");
myTemplate.Content = p;
phTemplate.Controls.Add(myTemplate);

usercontrolsInitイベントでは、LiteralタグにCMSからのコンテンツを入力します。つまり、サーバーコントロールボタンとインタラクションを使用し、ポストバックを処理できます。これらはすべてusercontrol内にカプセル化されています。

私は約20のテンプレートを持っていますが、ほとんどはレンダリングのみで、一部はインタラクティブです。ビューエンジンとしてRazorに移行したい。

1)動的コンテンツに基づいて部分ビューをロードし、CMSコンテンツをモデルとしてビューに渡すための最良のMVC方法は何ですか?テンプレートごとにパーシャルを備えた単一のCMSpageコントローラーですか?または、各テンプレートのコントローラーですか?

2)テンプレートパーシャル内から投稿を処理する最も構造化されたMVCの方法は何ですか:単一のCMSコントローラー上のメソッドですか?各テンプレートのコントローラー?

3)擬似コードを歓迎します!

前もって感謝します

4

1 に答える 1

0
  1. ユーザー制御アプローチと同様のアプローチに従うことができます。テンプレートIDに応じて、返す部分ビューを選択するアクションメソッドにリダイレクトします。アクションメソッドは部分IDを取得して実行できますreturn PartialView("View" + templateID.ToString());。を使用して、ビューから部分ビューを動的にロードすることもできHtml.Actionます。動的コンテンツの読み込みが必要な場合は、$。ajaxを使用してJQueryを使用して、部分ビューを読み込んでクライアントにストリーミングすることもできます。
  2. 部分ビューでフォームを定義するか、FormCollection(投稿されたフォームを参照する一般的な方法)を受け入れる1つのグローバル部分ビューを用意します。ポストバックされるIDを使用して、テンプレートの応答を把握できます。可能であれば、テンプレートにフォームを含めると、構成がはるかに簡単になります。ただし、後者の方が複雑ですが、一般的なCMSソリューションが必要な場合は、後者がそれを実現する方法です。

これに対する万能の解決策はありません。製品を少しだけ垣間見るだけではアドバイスを提供するのは難しいです。

于 2013-02-26T20:36:24.703 に答える