Как найти текущий идентификатор шаблона и имя в пользовательском контроле - PullRequest
1 голос
/ 16 марта 2012

Для поиска текущего узла, который мы используем,

Node currentNode = Node.GetCurrent();

string myValue = currentNode.GetProperty("productDetails").Value;

lblProductDetails.Text = myValue;

, но у меня есть сценарий, в котором мне нужно передать свойство в зависимости от шаблонов, у меня есть два шаблона, которые используют разные типы документов, так что если template1 get (Template1property1, ......) аналогично, если Template2 get (Template2property1, ......).

Возможно ли получить что-то подобное или есть лучший способработы в единственном пользовательском элементе управления,

Любая помощь или помощь будут оценены,

Спасибо

1 Ответ

4 голосов
/ 18 марта 2012

Действительно, вы можете, на самом деле есть много способов, но я покажу «Я использую .Net User Control позади моего макроса» . Я собираюсь сделать несколько предположений, чтобы продемонстрировать, как это сделать, поскольку они не изложены в вашем вопросе.

Предположения

Name (Alias) [Type]

Product (product) [Document Type]
  - Product Details (productDetails) [Property]
  - Product Template (productTemplate) [Default Template]

Event (event) [Document Type]
  - Event Details (eventDetails) [Property]
  - Event Template (eventTemplate) [Default Template]

Как сделать

Что собиралось сделать, это создать свойство .Net в пользовательском элементе управления, а затем позволить шаблону решить, какое имя свойства Umbraco искать. Этот способ означает, что вам не нужно зависеть от нескольких операторов if.

1. Запишите свой пользовательский элемент управления (в Visual Studio) и убедитесь, что у вас есть свойство, определенное в коде, как показано ниже

    private string _detailsProperty;
    public string DetailsProperty
    {
        set { this._detailsProperty = value; }
    }

2. Загрузите свой пользовательский элемент управления в папку /usercontrols/ в корневом веб-каталоге, а свою DLL (если она скомпилирована) в папку /bin/.

3. Создайте макрос (в Umbraco) и назначьте его вашему пользовательскому элементу управления. Давайте назовем макрос MyAbstractControl, а затем назначим ему .Net User Control из выпадающего списка. Затем нажмите Сохранить (Важно!).

4. Если вы нажали «Сохранить» на шаге выше, должна появиться кнопка «Обзор свойств». Нажмите на это, и вы увидите свою собственность из пользовательского контроля. Убедитесь, что флажок установлен, а затем нажмите кнопку Сохранить свойства. Чтобы проверить, выполнено ли это, перезагрузите макрос и перейдите на вкладку «Свойства» и увидите добавленное в список свойство вашего пользовательского элемента управления.

5. Добавьте что-то вроде следующего кода в ваши шаблоны, чтобы искать разные псевдонимы свойств Umbraco.

    <!-- put in template : productTemplate -->
    <umbraco:Macro Alias="MyAbstractControl" DetailsProperty="productDetails" runat="server">

    <!-- put in template : eventTemplate -->
    <umbraco:Macro Alias="MyAbstractControl" DetailsProperty="eventDetails" runat="server">

6. Затем вы можете сделать небольшое обновление кода в вашем вопросе, например, следующим образом, чтобы он вел себя как нужно

    if (!String.IsNullOrEmpty(this._detailsProperty))
    {
        Node currentNode = Node.GetCurrent();
        string myValue = currentNode.GetProperty(this._detailsProperty).Value;
        lblProductDetails.Text = myValue;
    }

Надеюсь, это поможет.

...