2011-12-05 8 views
0

この質問はおそらくDotNetNukeの生涯の中で最も覆われた質問ですが、ここではStackOverflowで質問します。私は他の方法を見ていません。すべてのDNNの専門家に事前に感謝します。モジュール内のビューを変更すると、管理者のスキンが表示されます

私は、マイケルワシントンのソリューション(パネル、MultiViews、...)とWill's(Strohl)のDotNetNukeのパーソナライゼーションエンジンに関する記事を、有用なSkinSrcを設定することで見てきました私はさらにEditUrl()/ NavigateUrl()を呼び出すと、adminスキンで1つのモジュールを持つページに移動します。ページには何も付いていません。

特定のバージョンはDotNetNuke 6.0.1(DNN)です。このモジュールには、私が順次ナビゲートしたいメインビューに加えて4つのビューがあります。例えば チェックアウトの開始 - >配送の詳細の収集 - >納得のいく注文

ソリューションを見つけましたか?

達成したい 1)他のモジュールでモジュールを読み込みます。モジュールのアイソレーションなし 2)プリロードしていないモジュールのビュー。モジュールがロードされると、各ビューのPage_Loadが呼び出されます

Help!

答えて

4

あなたがこれをモジュール開発者として求めているとすれば、解決策はDNNのメカニズムを使用してコントロールを指定することではありません。したがって、EditUrlを使用することも、NavigateURL呼び出しでControlKeyを指定することもできません(どちらもURLに "ctl = mycontrol"を生成します)。代わりに、クエリ文字列パラメータに基づいて、さまざまなコントロールをモジュールに表示させる必要があります。だから、一般的にあなたのモジュールの主目的は、クエリ文字列に基づいて他のコントロールを動的にロードすることです。したがって、たとえば:

  1. あなたはアイテムをリストするコントロールから始めます。各アイテムには「今すぐ購入」ボタンがあります。各項目のハイパーリンクは、ハンドラ制御のページロードで

NavigateURL(TabID, "", "View=BeginCheckout", "itemid=" & id, "mid=" & mid)

2)を呼び出すことによって生成することができ、それが何が「表示」クエリ文字列パラメータに指定されているかどうかを確認します。表示されていない場合はリスティングコントロールを表示し、そうであれば対応するコントロールを表示します。

Dim controlPath As String 
Dim path as String = "~/DesktopModules/MyModule/Controls" 
Select Case Request("View") 
    Case "BeginCheckout" 
     ControlPath = path + "BeginCheckout.ascx" 
    Case "DeliveryDetails" 
     ControlPath = path + "DeliveryDetails.ascx" 
    Case "ConfirmOrder" 
     ControlPath = path + "ConfirmOrder.ascx" 
    Case Else 
     ControlPath = path + "ItemList.aspx" 
End Select 

If System.IO.File.Exists(Request.MapPath(controlPath)) Then 
    placeholder.LoadControl(controlPath) 
Else 
     Throw New Exception("Unable to load selected template. Please go into module settings and select a list and details template.") 
End If 

DNNの高度なモジュールのほとんどは、これらの行に沿って何かを行います。そのため、そこにはたくさんのサンプルコードがあります。私はコアモジュールのいくつかが似たようなことをするだろうと推測します。上記のコードをEfficon's Articles module for DotNetNukeから変更しました。

+0

Daveさん、ありがとうございました!私はそれをやることを避けるためのより良い方法はないと思いました。 – karbonphyber

+0

私が最終的に行くことを決めたのは です。1)チェックアウトプロセスのページであるコントロールビューを再作成し、各Page_Loadイベントを、ビューが必要なときに実行されるパブリックメソッドに変更しました。これは、私がそれらを望んでいないときに実行されている各page_loadを防ぐでしょう。各ページにガーディングが実装されていたため、最初のページがロードされたときにページロードが実行されていた。 2)MultiViewに移動し、あらかじめヘッダーにコントロールを登録する。マスターページにコントロールを配置する。 3)コントロールビューから発生したページを変更するPageChangeイベントを作成しました。 – karbonphyber

関連する問題