【问题标题】:sharepoint webpart property disappear after a day (C#)sharepoint webpart 属性在一天后消失(C#)
【发布时间】:2012-08-16 13:09:25
【问题描述】:

我开发了一个带有 webpart 属性和一些文本框的自定义 webpart,它可以部分工作。

如果我部署项目,属性中的书面文本就没有了。还行吧。

但我的主要问题是,大约一天后,属性中的文本消失了。我使用 SharePoint 2010。

这是我的代码:

[WebBrowsable(true), Category("category"), Personalizable(PersonalizationScope.Shared), WebDisplayName("Hello"), WebDescription("Description1")]
    public string hello
    {
        get { return _hello; }
        set { _hello = value; }
    }
    public static string _hello;

【问题讨论】:

  • 属性消失是什么意思?整个财产或只是它的内容,所以它失去了它的价值?您使用的是同一个用户,是否与网站集管理员一起尝试过?
  • 只有值(文本)消失,这是我在文本框中写的。我使用 moss-admin 用户。这是一个农场解决方案,其他用户也无法输入值。

标签: c# sharepoint properties textbox web-parts


【解决方案1】:

你不应该为你的 _hello 字符串使用静态声明符。此值与实例无关(因此是静态的),并且在应用程序池回收时(每天发生一次)将失去其值。 删除静态并使用速记,你应该没问题:

[WebBrowsable(true),
 Category("category"),
 Personalizable(PersonalizationScope.Shared),
 WebDisplayName("Hello"),
 WebDescription("Description1"),
WebPartStorage(Storage.Shared)] 
public string Hello{ get; set;}

【讨论】:

  • 听起来不错且合乎逻辑。如果我删除静态,我会收到错误:非静态字段、方法或属性“WebPartProperty.VisualWebPart1.VisualWebPart1._hello”需要对象引用。我在 ascx.cs 文件中使用字符串 _hello,但在 VisualWebPart.cs 中创建了属性
  • +100 为 Rikard。 Grekko - 您需要做一些研究才能真正理解静态的含义以及类和类实例之间的区别 - 您必须了解所有相当基本的东西才能使用现代语言(如 C#、Java 等)进行有效开发。跨度>
【解决方案2】:

我解决了。

我在 VisualWebPart1.cs 中有 SharePoint-WebPart-Property 定义,并在 VisualWebPart1UserControl.ascx.cs 中构建了我的“主要”WebPart。

所以主要问题是 UserControl 和 VisualWebPart1.cs 之间的连接。 这是 VisualWebPart1.cs 中“连接”的代码:

        protected override void CreateChildControls()
    {
        VisualWebPart1UserControl control = (VisualWebPart1UserControl)Page.LoadControl(_ascxPath);
        control.WebPart = this;
        Controls.Add(control);
    }

然后是没有静态的属性:

public string _hello;
[WebBrowsable(true), Category("category"), Personalizable(PersonalizationScope.Shared), WebDisplayName("Hello"), WebDescription("Description1")]
public string hello
{
    get { return _hello; }
    set { _hello = value; }
}

我所做的下一步是访问 UserControl.ascx.cs 并定义一个 getter 和 setter 以将 UserControl.ascx.cs 与 VisualWebPart1.cs 连接起来:

public VisualWebPart1 WebPart { get; set; }

然后就可以用WebPart.hello初始化变量了

【讨论】:

    【解决方案3】:

    在我开发的所有 webparts 中,我也使用了WebPartStorage 属性。我的猜测是,如果您不使用它,则该属性仅存储在内存中。因此,在 IISRESET/应用程序池回收后,您的属性值将丢失。

    所以你可以把你的代码改成这样:

     [WebBrowsable(true), 
      Category("category"), 
      Personalizable(PersonalizationScope.Shared), 
      WebDisplayName("Hello"), 
      WebDescription("Description1"),
      WebPartStorage(Storage.Shared)] 
      public string hello 
      { 
          get { return _hello; } 
          set { _hello = value; } 
      } 
      public static string _hello; 
    

    【讨论】:

    • 从未听说过 WebPartStorage 并且 MSDN 没有针对 SharePoint 2010 的任何引用(仅适用于 SP2003):msdn.microsoft.com/en-us/library/…
    • 您链接到的页面位于 SPS2010 分支中 :-) 但是,在 SharePoint 2010 中它确实变得多余,因为 Personalizable 属性就足够了(根据此处的讨论:@ 987654322@)
    • 有趣的讨论!但是不,它不是 SP2010 分支 - 查看顶部的“版本”下拉列表。它仅包含 Windows SharePoint Services 3,以防它仍然受支持,我们会在 AFAIK 中看到不同的版本。
    猜你喜欢
    • 2013-02-10
    • 2011-01-04
    • 2015-08-12
    • 2011-05-12
    • 2011-11-01
    • 2020-05-12
    • 2011-10-30
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多