8

私は DotNetNuke の初心者です。優しくしてください。「DotNetNuke 6 Compiled Module」テンプレートを使用してモジュールをビルドしています。プロジェクトには既に View.ascx コントロールがあり、test.ascx という別のコントロールを追加しました。

私の質問は、モジュールを追加するさまざまなページでさまざまなビューを表示するにはどうすればよいかということです。(それが可能な場合)たとえば、default.aspxページでView.ascxを表示し、次にdefault2.aspxページでtest.ascxユーザーコントロールを表示しますか?

これが不可能な場合は、ascx コントロールごとに異なるビジュアル スタジオ プロジェクトが必要です。確かにそうではありません。

4

2 に答える 2

10

ここでのパーティーには少し遅れましたが、私の理解が正しければ、異なるビューを持つモジュールが必要です。Prashant の方法に追加するために、私がよく使用する 2 つのオプションを次に示します。

1.) マルチビュー

<asp:MultiView ID="myMView" runat="server" ActiveViewIndex="0">
    <asp:View ID="ViewOne" runat="server">

      ...Content 1 here...

    </asp:View>
    <asp:View ID="ViewTwo" runat="server">

      ...Content 2 here...

    </asp:View>  
</asp:MultiView>

コードビハインドでは、いくつかの条件に基づいてアクティブなビューを設定できます

if(someCondition)
  myMView.ActiveViewIndex = 0;
else
  myMView.ActiveViewIndex = 1;

2.) プレースホルダー。これは、各ビューとそのコードを独自のコントロールで分離できるため、私のお気に入りです。1 つのコントロール (マスター コントロール) を DNN に登録するだけで済みます。10、100、1000 の子コントロールを持つことができ、それらは MasterControl.ascx プレースホルダー内に含まれるため、DNN に登録する必要はありません。MasterControl.ascx に追加します。

<asp:PlaceHolder ID="myPholder"  runat="server"></asp:PlaceHolder>

方法 1 の Prashant の指示に従い、MasterControl を DNN に登録します。コードビハインドで、次を追加します。

string childControl;
switch (condition)
{
    case "condition1":
        childControl = ControlPath + Child1.ascx";
        break;
    case "condition2":
        childControl = ControlPath + Child2.ascx";
        break;      
    ...more conditions...
}
PortalModuleBase objModule = (PortalModuleBase)this.LoadControl(childControl);
if ((objModule != null))
{
    myPholder.Controls.Clear();
    objModule.ModuleConfiguration = this.ModuleConfiguration;
    myPholder.Controls.Add(objModule);
}

物事のやり方が違うだけです。幸運を。

于 2013-09-15T03:41:13.833 に答える