2012-01-16 19 views
1

私はContentPartを使って作成したシンプルなウィジェットを持っています。 ContentPartには適切なドライバがあり、ウィジェットはオーチャードのどこにでも置くことができ、すべてがうまくいきます!ウィジェットは、ユーザーから何らかのデータをキャプチャし、検証し、処理し、ウィジェットに成功応答を表示する必要があります。オーチャードCMSのウィジェットテンプレートをオーバーライド

これを実現するには、モデルを処理し、同じMyFormビューが無効な場合はそれを返すPOST要求を受け入れるコントローラーを定義し、有効な場合はFormSuccessビューを返します。ウィジェットパートテンプレートでは、@Html.Partial("MyForm")を使用して、フォームを含むdivをPOST応答で更新するAjaxフォームを含むMyFormビューを表示します。コントローラは、データに応じてMyFormビューまたはFormSuccessビューを返します。

私の問題は、デザイナーがMyFormビューとFormSuccessビューの部分ビューをオーバーライドする必要があることです。Partビューテンプレートを簡単にオーバーライドできますが、部分ビューはオーバーライドできません。

私は@Html.Partial("MyForm")を使用しているため、現時点ではこれが不可能な理由が考えられます。私は@Display(New.MyForm())を代わりに使用すると、現在のテーマのViewsフォルダにMyForm.cshtmlというファイルを作成することでMyFormビューを上書きできることを発見しました。これは私が必要とするものですが、どのようにすればよいですか@Displayコントローラーのアクションで?

現時点では、私はreturn this.PartialView("MyForm", model)またはreturn this.PartialView("FormSuccess")を実行していますが、元のビューを使用し、オーバーライドしたものは使用しません。私はShapeResultがあることに気がつきましたが、これが正しいことなのかどうか分からず、動的コンストラクタパラメータを生成する方法がわかりません。また、理想的には、MyFormビューに強く型付けされたモデルを用意して、HtmlHelperメソッドLabelFor、TextboxFor、ValidationMessageForを使用できるようにする必要があります。

これまで誰かがこのようなことをしたことがありますか?

おかげで、ジェイソン

答えて

0

私のモジュールがコンパイルされている方法を変更することで、この問題を解決できました。私はこれがどのように機能しているか完全に理解していませんが、それはあります!

最初は、現在のテーマのviewsフォルダに同じ名前のファイルを作成して部分的な表示を上書きしようとしましたが、これは何もしませんでした。

私が見つけたのは、私のモジュールを強制的にコンパイルすると、テーマフォルダの部分的なビューがモジュールの関連するビューを上書きするということです。以前は、モジュールをデバッグしたいので参照されたモジュールローダーを使用していましたが、これが私が達成できる唯一の方法でした。

モジュールが動的にコンパイルされると、私のモジュールからのビューがテーマのオーバーライドビューにマップされます。

ここには、モジュールの読み込みを説明する良いlinkがあります。

0

は、あなたがこのような何かを試してみましたか?

public ActionResult YourAction(){ 
    //where yourContent is a your widget content 
    //and _contentManager is IContentManager 
    dynamic model = _contentManager.BuildDisplay(yourContent); 
    return View((object)model); 
} 
関連する問題