【问题标题】:Class-level Static Variable per Instance每个实例的类级静态变量
【发布时间】:2010-01-28 22:53:17
【问题描述】:

我正在尝试执行以下操作:

我需要一个静态变量来从 List 控件中获取 ListItemCollection(我可以这样做,但如果我不将其设置为 Shared,则不会保留应有的值)。问题是这个类是一个 SharePoint webpart,所以我很可能会多次使用该 webpart,并且我需要这个变量对于每个 webpart 都是唯一的,共享无法完成。

我尝试了你能想象到的一切。我在 Sub 中放置了一个静态变量(共享和不共享),我尝试使用属性(也共享和不共享)...

欢迎提出任何想法。

谢谢。

【问题讨论】:

    标签: vb.net sharepoint static web-parts shared


    【解决方案1】:

    根据定义,静态成员是每个类(或具有 ThreadStatic 属性的每个线程)。

    【讨论】:

    • 如果没有 ThreadStatic 属性 (msdn.microsoft.com/en-us/library/…),共享 (VB) 变量将是每个类和每个 AppDomain。如果需要更广泛的范围(例如每个进程或机器)共享是不够的。
    【解决方案2】:

    如果您需要在 webpart 上保存该属性,请在该属性上添加 WebPartStorageAttribute,并在其中添加一个 FriendlyNameAttribute 以使其干净:

    C#版本:

    [FriendlyNameAttribute("What the setting will be called")]
    [WebPartStorage(Storage.Shared)]
    private string MyStringThatGetsSaved { get; set; }
    

    VB.Net 版本:

    <WebPartStorage(Storage.Personal), FriendlyNameAttribute("What the setting will be called")>
    Private mMyStringThatGetsSaved As String
    Public Property MyStringThatGetsSaved () As String
        Get
            Return mMyStringThatGetsSaved 
        End Get
        Set(ByVal Value As String)
            mMyStringThatGetsSaved = Value
        End Set
    End Property
    

    这就是你所追求的吗?如果不是,您能否进一步澄清一下?

    【讨论】:

    • 您能否在 vb.net 中添加一个示例,因为问题已被标记为此类。
    • @Lachlan:谢谢,错过了标签...现在添加了两个版本,以防 c# 中有人绊倒并需要它。
    • 我尝试了 Storage.Personal 和 Storage.Shared,都没有成功。我认为这与作为数组(ListItemCollection)的变量有关,就像添加不会触发 Set。所以我尝试做一个时间变量并设置它,但它仍然不起作用......我将尝试对我想要显示的数组中的所有内容使用复选框和几个属性。如果需要,我会发布更多详细信息。谢谢。
    【解决方案3】:

    我终于另辟蹊径,只是在toolpart上加了一些checkbox,在webpart上设置了属性。

    无论如何,我想做的是:

    拥有一个在编辑和浏览模式下更改其控件的 Web 部件。在编辑模式下,我显示了两个 ListBox 控件、两个按钮(添加、删除)。当我单击添加按钮时,必须从左侧 ListBox 中删除该值并将其添加到右侧 ListBox,到目前为止,我能够毫无问题地实现此功能......问题是当我回到浏览模式我需要使用右侧ListBox中的项目来显示(所以我添加了一个ListItemCollection控件,它将存储右侧ListBox中的值),项目的文本和一个TextBox控件,然后用户将在该文本框中输入他们的文本并点击“搜索”按钮,将执行搜索查询。

    我的问题是,当我从编辑转到浏览时,我添加的 ListItemCollection 变量正在重新启动。所以我将它声明为共享,这确实有效,但是当我添加 WebPart 的新实例时,它们显示了相同的字段......我不知道是否有办法做一个静态类级变量每个实例都是独一无二的,所以我采用了 ToolPart 方式...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 2015-07-24
      • 2021-09-14
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多