1 つのビジュアル Web パーツがページ上で複数回使用される (パーソナライゼーション状態の保存の問題)

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/13749

質問

6 つの異なるカテゴリに同じキー フィールドを持つ予算レポートを作成するという要件があります。各セクションの listitem を取得し、編集ボタンとともにデータを表示するビジュアル Web パーツを作成しました。Web パーツには、予算の種類を保存するためのカスタム プロパティもあります。

 public class ProjectDetailsView : WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/SpecialProjectsProjectList/ProjectDetailsView/ProjectDetailsViewUserControl.ascx";

        [Personalizable(), WebBrowsable]
        public String BudgetType { get; set; }

        protected override void CreateChildControls()
        {
            ProjectDetailsViewUserControl control = Page.LoadControl(_ascxPath) as ProjectDetailsViewUserControl;
            //Control control = Page.LoadControl(_ascxPath);
            if (control != null)
            {
                control.WebPart = this;
            }

            Controls.Add(control);
        }
    }
}

このビジュアル ウィパートを同じページに 6 回追加しました。最初のコントロールのみが実際にカスタム プロパティを保存しているようです。これはコード内のエラーである可能性がありますか、それとも同じページに同じ Web パーツを何度も配置できないのでしょうか?

セクションごとに個別のコントロールを作成する必要があることが誰かにすでにわかっている場合、デバッグに何時間も費やしたくありません。どうもありがとう!

役に立ちましたか?

解決 2

GUI でカスタム プロパティを保存できなかった理由がわかりました。SPContext から現在の Web オブジェクトを閉じていました。どうやらこれはフレームワークによって処理されるため、実行すべきではありません。最終的に Web パーツのユーザー コントロールから CurrentSite.Dispose() を削除すると、カスタム プロパティを適切に保存できるようになりました。

他のヒント

Web パーツをページに複数回配置する場合は、Web パーツの各インスタンスに一意の ID が必要です。以下に実行できるサンプルを示します。

control.ID = this.ID + "_ProjectDetailsControl";

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top