Создать SharePoint (2010) ToolPart для нескольких веб-частей

Я использую основные инструкции ( здесь) для создания свойства, управляемого настраиваемой ToolPart.

Все хорошо, за исключением части, где для доступа к свойству webpart в методе ApplyChanges я должен привести "this.ParentToolPane.SelectedWebPart" обратно к конкретному классу "SimpleWebPart".

public override void ApplyChanges()
{
    SimpleWebPart wp1 = (SimpleWebPart)this.ParentToolPane.SelectedWebPart;

// Send the custom text to the Web Part.
    wp1.Text = Page.Request.Form[inputname];
}

Это означает, что я должен связать каждую часть инструментов с определенной веб-частью. Есть ли способ лучше? Я не могу создать интерфейс, так как нет способа указать свойство в одном.

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

Я мог бы создать базовый класс для всех веб-частей, которые имеют общедоступное свойство "Текст", но это бесполезно.

Я мог бы также впасть в отчаяние и взломать ссылку this.ParentToolPane.SelectedWebPart с помощью Reflection и таким образом вызвать любые свойства с именем "Text".

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

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

1 ответ

Я использовал интерфейс вместо конкретного экземпляра веб-части.

private class IMyProperty
{
    void SetMyProperty(string value);
}

public override void ApplyChanges()
{
    IMyProperty wp1 = (IMyProperty)this.ParentToolPane.SelectedWebPart;

    // Send the custom text to the Web Part.
    wp1.SetMyProperty(Page.Request.Form[inputname]);
}

Но это не дает предупреждения времени компиляции о том, что для инструментальной части требуется родительская веб-часть для реализации интерфейса IMyProperty.

Простым решением этого является добавление свойства интерфейса IMyProperty в конструктор панели инструментов и вызов этой ссылки вместо свойства this.ParentToolPane.SelectedWebPart.

public ToolPart1(IContentUrl webPart)
{
    // Set default properties              
    this.Init += new EventHandler(ToolPart1_Init);
    parentWebPart = webPart;
}

public override void ApplyChanges()
{
    // Send the custom text to the Web Part.
    parentWebPart.SetMyProperty(Page.Request.Form[inputname]);
}

public override ToolPart[] GetToolParts()
{
    // This is the custom ToolPart.
    toolparts[2] = new ToolPart1(this);
    return toolparts;
}

Это прекрасно работает, но я не могу избавиться от ощущения, что в базовом коде SharePoint есть что-то неприятное, что может сбить меня с толку позже.

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