Пользовательские свойства веб-части Sharepoint получают значения по умолчанию при перезагрузке сервера - PullRequest
1 голос
/ 13 сентября 2010

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

Это нормальное поведение? свойства сохранены, когда сервер работает, или есть некоторые параметры, которые я пропускаю.

Спасибо.

РЕДАКТИРОВАТЬ: код:

namespace TestWebpart
{
    [ToolboxItemAttribute(false)]
    [XmlRoot(Namespace = "TestWebpart")]
    public class GraphWebpart : Microsoft.SharePoint.WebPartPages.WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/Test_Graph/TestWebpart/GraphWebpartUserControl.ascx";

        protected override void CreateChildControls()
        {
            ReloadElements();
        }

        protected void ReloadElements()
        {
            Controls.Clear();
            GraphWebpartUserControl control = (GraphWebpartUserControl)Page.LoadControl(_ascxPath);

            control.xmlDataUrl = XMLFileUrl;

            Controls.Add(control);
        }

        private static string _xmlFileUrl;
        [WebBrowsable(true),
        Personalizable(PersonalizationScope.Shared),
        DefaultValue(""),
        Description("xml"),
        DisplayName("xml"),
        WebDisplayName("xml")]
        public string XMLFileUrl
        {
            get { return _xmlFileUrl; }
            set { 
                _xmlFileUrl = value;
                ReloadElements();
            }
        }
}
}

EDIT2: Удаление статического поля из полей приводит к появлению текущего исключения:

Web Part Error: An error occurred while setting the value of this property: TestWebpart:XMLFileUrl - Exception has been thrown by the target of an invocation.
Hide Error Details

[WebPartPageUserException: An error occurred while setting the value of this property: Blue_Graph.GraphWebpart.GraphWebpart:XMLFileUrl - Exception has been thrown by the target of an invocation.]
  at Microsoft.SharePoint.WebPartPages.BinaryWebPartDeserializer.ApplyPropertyState(Control control) 
  at Microsoft.SharePoint.WebPartPages.BinaryWebPartDeserializer.Deserialize() 
  at Microsoft.SharePoint.WebPartPages.SPWebPartManager.CreateWebPartsFromRowSetData(Boolean onlyInitializeClosedWebParts)

1 Ответ

2 голосов
/ 13 сентября 2010

Прежде всего, вы не должны иметь

private static string _xmlFileUrl;

должно быть

private string _xmlFileUrl;

Эта статическая переменная будет потеряна в IISRESET - не будет работать в ферме и потенциально может вызывать всевозможные «поточно-ориентированные» проблемы, если используется многопоточная среда (например, веб-сервер), поэтому используйте их, если они действительно нужны .

Когда SharePoint загружает веб-часть (или после нажатия кнопки Сохранить / Применить на панели инструментов), она использует отражение, чтобы найти ваши свойства (атрибут [Browsable ...), а затем сериализацию, чтобы загрузить / сохранить значение свойства в база данных. Один из этих двух не работает.

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

[Browsable(true),
 Category("Miscellaneous"),
 DefaultValue(defaultText),
 WebPartStorage(Storage.Personal),
 FriendlyName("Text"),
 Description("Text Property")]
...