3

いくつかのテキスト ボックスを含む Web パーツ プロパティを使用してカスタム Web パーツを開発しましたが、部分的に機能します。

プロジェクトをデプロイすると、プロパティに書かれたテキストが消えます。これで結構です。

しかし、私の主な問題は、約1日後にプロパティ内のテキストが消えることです。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;
4

3 に答える 3

3

_hello 文字列に static 宣言子を使用しないでください。この値はインスタンスに依存しない (つまり静的) ため、アプリケーション プールがリサイクルされる (1 日に 1 回発生する) と、その値は失われます。static を削除し、省略形を使用するだけで問題ありません。

[WebBrowsable(true),
 Category("category"),
 Personalizable(PersonalizationScope.Shared),
 WebDisplayName("Hello"),
 WebDescription("Description1"),
WebPartStorage(Storage.Shared)] 
public string Hello{ get; set;}
于 2012-08-21T11:56:18.187 に答える
0

私はそれを解決しました。

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

于 2012-08-23T10:24:04.783 に答える
-1

私が開発したすべての Web パーツで、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; 
于 2012-08-21T10:17:51.227 に答える