Потеря свойств webpart toolpart Мосс 2007 - PullRequest
2 голосов
/ 18 ноября 2010

У меня следующая проблема:

Я создал WebPart с ToolPart, эта часть инструментов имеет несколько элементов управления (текстовое поле, выпадающий список, ...) когда я заполняю все и применяю, все идет хорошо, даже когда я нажимаю ок. Но когда я вернусь к изменить -> изменить веб-часть, все мои данные, которые я ввел, исчезли. Как я могу решить это?

Спасибо

Ответы [ 3 ]

1 голос
/ 18 ноября 2010

Вам необходимо сохранить значения из Панели инструментов в свойствах веб-части.Например, допустим, я хочу сохранить строку для «Заголовка» ... в веб-части определить свойство:

private const string DEFAULT_WPPColumnTitle = "Title";
private string _WPPColumnTitle = DEFAULT_WPPColumnTitle;

[Browsable(false)]
[WebPartStorage(Storage.Shared)]
public string WPPColumnTitle
{
    get { return this._WPPColumnTitle; }
    set { this._WPPColumnTitle = value; }
}

Я всегда использую префикс «WPP», чтобы сохранить все w eb p art p вместе.

Затем в переопределении ApplyChanges панели инструментов сохраните значение элемента управления (_ddlColumnsTitle) в веб-части (WPPColumnTitle):

/// <summary>
/// Called by the tool pane to apply property changes to
/// the selected Web Part.
/// </summary>
public override void ApplyChanges()
{
    // get our webpart and set it's properties
    MyCustomWebPart et = (MyCustomWebPart)ParentToolPane.SelectedWebPart;
    et.WPPColumnTitle = _ddlColumnsTitle.SelectedValue;
}

Наконец, если пользователь уже отредактировал свойства, мы хотим, чтобы часть инструментов была предварительно заполнена конфигурацией пользователя.В методе CreateChildControls() вашего Toolpart инициализируйте элементы управления:

protected override void CreateChildControls()
{
    try
    {
        MyCustomWebPart et = (MyCustomWebPart)ParentToolPane.SelectedWebPart;

        // ... code to create _ddlColumnsTitle and add it to the Controls

        // default our dropdown to the user's selection
        ListItem currentItem = _ddlColumnsTitle.Items.FindByValue(et.WPPColumnTitle);
        if (null != currentItem)
        {
            _ddlColumnsTitle.SelectedValue = currentItem.Value;
        }
    }
    catch (Exception ex)
    {
        _errorMessage = "Error adding edit controls. " + ex.ToString();
    }
}
0 голосов
/ 19 ноября 2010

Я решил это с помощью добавления свойства в мою веб-часть "IsNeverSet" (bool) и когда я иду в «CreateControls ()» моей части инструментов, я получаю это свойство и если оно ложно, я загружаю все свойства из своей веб-части и заполняю их в инструментальной части. Так я нашел его с помощью Кит Менке

0 голосов
/ 19 ноября 2010

Откройте отладчик и дважды проверьте, что значения применяются к вашим свойствам в Apply (т. Е. Установлен WPPColumnTitle).

Если это так, то проблема в том, что SharePoint не сериализует / десериализует значение из свойства (WPPColumnTitle) в базу данных и обратно - проверьте, записав это свойство в веб-часть, - как только вы покинете страницу и вернетесь будет пусто.

Если так, то проверяйте такие вещи в классе

[XmlRoot(Namespace = "YourNamespace")]

и это (не обязательно) по свойствам

[XmlElement(ElementName = "ColumnTitle")]

Я также видел проблемы, если вы называете класс веб-части "WebPart", поэтому назовите его MyWebPart

...