Создать SharePoint (2010) ToolPart для нескольких веб-частей - PullRequest
1 голос
/ 29 ноября 2011

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

Все хорошо, за исключением той части, где для доступа к свойству 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 и вызвать любые свойства с именем «Текст» таким образом.

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

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

1 Ответ

0 голосов
/ 02 декабря 2011

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

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 есть что-то неприятное, что может сбить меня с толку позже.

...