1 つのビジュアル Web パーツがページ上で複数回使用される (パーソナライゼーション状態の保存の問題)
-
16-10-2019 - |
質問
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";
所属していません sharepoint.stackexchange