2010-11-18 4 views
2

У меня следующая проблема:Потеря свойств WebPart toolpart мох 2007

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

Благодаря

ответ

1

Вам нужно сохранить значения из Toolpart в свойствах WebPart в. Например, позволяет сказать, что я хочу сохранить строку для «Title» ... в WebPart определить свойство:

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», чтобы сохранить все ш Е.Б. р art p roperties вместе.

Затем в ApplyChanges переопределении в Toolpart, в сохранении значения элемента управления (_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; 
} 

Наконец, если пользователь редактировал свойство уже, мы хотим Toolpart быть предварительно -попущенная с конфигурацией пользователя. В 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

У меня это уже есть. Но моя проблема заключается в том, когда я применяю или нажимаю ok, а затем возвращаюсь в режим редактирования моего веб-сайта, все мои свойства возвращаются по умолчанию ... Может быть, мне нужно переопределить функцию в моей веб-части, когда я перейду в режим редактирования? – RubenHerman

+0

Erm - у вас все еще есть проблема? Ответ помечен как правильный, поэтому не уверен. – Ryan

+0

@Ruben, Извините, забыл о инициализации Toolpart с предыдущими выборами пользователя. Похоже, вы смогли заставить его работать в любом случае. Я обновил свой ответ для полноты. :) –

0

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

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

Если да, то проверить вещи, как это на классе

[XmlRoot(Namespace = "YourNamespace")] 

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

[XmlElement(ElementName = "ColumnTitle")] 

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^