DNN: использование нескольких веб-элементов управления в одном модуле и отображение разных элементов управления на разных страницах

Я новичок в DotNetNuke. Пожалуйста, будьте нежны. Я использую шаблон "DotNetNuke 6 Compiled Module" для сборки моего модуля. У меня уже есть элемент управления View.ascx в проекте, и я добавил еще один элемент управления с именем test.ascx.

Мой вопрос: как мне показать разные взгляды на разных страницах, к которым я добавляю модуль. (если это вообще возможно), например, Показать View.ascx, скажем, на странице default.aspx, а затем на странице default2.aspx показать пользовательский элемент управления test.ascx?

Если это невозможно, значит, мне нужны разные визуальные студийные проекты для каждого элемента управления ascx. Конечно, нет.

2 ответа

Решение

Astro,

Опция 1:

Вам нужно перейти в Host > Extensions > Edit your extension > Expand Module description и нажать на add control.

Здесь вы должны выбрать свой элемент управления ascx и указать ключ в виде любой строки. Допустим, вы предоставили ключ testВы выбрали пользовательский элемент управления и выбрали тип элемента управления как view и сохранил это.

Теперь из представления вы можете использовать следующий код для перехода к недавно добавленному элементу управления:DotNetNuke.Common.Globals.NavigateUrl(TabId,"test","mid="+ModuleID);

Это перенаправит страницу и загрузит вашу страницу с test.ascx.

Вы можете использовать этот тип опции, когда вы хотите показать view.ascx по умолчанию и хотите переключить представление при выполнении какого-либо действия и показать test.ascx. Недостатком здесь является то, что при переключении на test.ascx все остальные модули, добавленные на страницу, не будут видны.

Вариант 2:

Вы должны создать новое определение в модуле. Для этого перейдите в Host > Extensions > Edit Your module > Expand Module Definitoins > Нажмите на add и добавьте новое определение. Как только определение добавлено, вы можете добавить свой test.ascx и просмотреть элемент управления к определению без какого-либо ключа.

Как только вышеприведенное будет сделано, если вы удалите и добавите свой модуль на страницу снова, он покажет два модуля, добавленных на страницу. Это два определения. Посмотрите на определение модуля блога, например, как работает несколько определений.

Эта опция используется, когда вы хотите одновременно показать несколько элементов управления представлением из одного и того же модуля.

Надеюсь, это поможет. Позвольте мне знать, если у вас есть еще вопросы.

Немного опоздал на вечеринку здесь, но если я вас правильно понял, вам нужен модуль с разными взглядами. Чтобы добавить к методам Прашанта, вот два варианта, которые я часто использую;

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.) Заполнитель. Это мой фаворит, так как он позволяет мне отделить каждое представление и его код в отдельном элементе управления. Вам нужно только зарегистрировать один элемент управления (главный элемент управления) в DNN. Вы можете иметь 10, 100, 1000 дочерних элементов управления, и их не нужно регистрировать в DNN, поскольку они будут содержаться в заполнителе MasterControl.ascx. В MasterControl.ascx добавьте

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

Следуйте инструкциям Прашанта в методе 1 и зарегистрируйте 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);
}

Просто другой способ делать вещи. Удачи.

Другие вопросы по тегам