Изменение видов в модуле выводит меня в оболочку администратора - PullRequest
0 голосов
/ 05 декабря 2011

Этот вопрос, вероятно, был наиболее покрытым вопросом за все время существования DotNetNuke, но я собираюсь задать его здесь, в StackOverflow, потому что мне нужен ответ, действительно хороший, который не заставляет меня смотреть иначе. Заранее благодарим всех экспертов DNN.

Я исследовал много способов сделать эту работу для себя, и я видел решения Майкла Вашингтона (Panels, MultiViews, ...) и пост блога Уилла (Strohl) о движке персонализации DotNetNuke через настройку SkinSrc, которая полезна, Помимо чтения кода Default.aspx, который дал мне больше понимания, я все еще сталкиваюсь с проблемой, заключающейся в том, что вызов EditUrl () / NavigateUrl () приводит меня к странице с одним модулем в скине администратора или странице ни с чем соответственно.

Конкретная версия - DotNetNuke 6.0.1 (DNN). Этот модуль имеет 4 других представления в дополнение к основному виду, по которому я хочу последовательно перемещаться. например Начать оформление заказа -> Сбор данных о доставке -> Подтвердить заказ

Вы нашли решение?

Я хочу достичь 1) Модуль загружается с другими модулями вокруг. Нет изоляции модуля 2) Представления в модуле, которые не загружаются предварительно, например Page_Load в каждом представлении вызывается при загрузке модуля

Помощь!

1 Ответ

4 голосов
/ 05 декабря 2011

Если вы спрашиваете об этом как о разработчике модуля, решение состоит в том, чтобы не использовать механизм DNN для указания элемента управления. Таким образом, вы не можете использовать EditUrl или указать ControlKey в вызове NavigateURL (которые оба генерируют «ctl = mycontrol» в URL). Вместо этого вам нужно, чтобы ваш модуль отображал различные элементы управления на основе параметров строки запроса. Таким образом, в вашем модуле обычно есть элемент управления, основной целью которого является динамическая загрузка других элементов управления на основе строки запроса. Так, например:

  1. Вы начнете с вашего контроля, который перечисляет элементы. У вас будет кнопка «Купить сейчас» для каждого предмета. Гиперссылка для каждого элемента может быть сгенерирована путем вызова

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

2.) При загрузке страницы элемента управления обработчика он проверяет, указано ли что-либо для параметра Querystring «Просмотр». Если нет, то отображается элемент управления списком, если это так, отображается соответствующий элемент управления.

    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 для DotNetNuke .

...