私はこれを理解しようと探していましたが、正しい用語を使用していないか、答えが見つからないだけです。これが見つからなかったことをお詫びする前に質問され、回答された場合-回答がすでにそこにある場合は、リンクをいただければ幸いです。
カスタムプロパティ(Webパーツクラスとユーザーコントロール)を備えたビジュアルWebパーツがあります。すべてWebBrowsable(true)、WebPartStorage(Storage.Shared)などの属性で適切に装飾されています。完全を期すために、Personalizable(Personalization.Shared)も試しました。私がやりたいのは、これらのWebパーツのプロパティを標準のWebパーツの編集インターフェイスで編集するのではなく、現在のユーザーがサイト管理者であるかどうかに基づいて、それらの編集コントロールを表示したいということです。
ここに私の問題があります。ユーザーコントロールからカスタムプロパティを設定すると、設定が保存されません。Webパーツクラスのsetterメソッドにブレークポイントを設定し、値が実際に渡されていることを確認しましたが、Webパーツがページに再ロードされると、設定はデフォルトの空の文字列に戻ります。
これらの設定を保存するための基本的な手順が欠けているように感じます。以下は、私が使用しているコードを示すためのスニペットです。これは明らかにコード全体ではなく、私がどこにいるのかを説明するための関連部分にすぎません。
SafetyTrackerControl.ascx.cs:
public partial class SafetyTrackerControl : System.Web.UI.UserControl
{
public string EmployeeComments { get; set; }
public SafetyTrackerWebpart ParentWebPart { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
txtEmployeeComments.Text = EmployeeComments;
}
protected void btnSave_Click(object sender, EventArgs e)
{
ParentWebPart.EmployeeComments = txtEmployeeComments.Text;
}
}
SafetyTrackerWebPart.cs
[XmlRoot(Namespace = "SafetyTrackerSettings")]
public class SafetyTrackerWebPart : WebPart
{
SafetyTrackerControl _SafetyTrackerControl;
protected override void CreateChildControls()
{
base.CreateChildControls();
_SafetyTrackerControl = (SafetyTrackerControl)Page.LoadControl("~/_ControlTemplates/SafetyTracker/SafetyTrackerControl.ascx");
_SafetyTrackerControl.EmployeeComments = EmployeeComments;
_SafetyTrackerControl.ParentWebPart = this;
}
internal string _employeeComments;
[WebBrowsable(true),
WebDisplayName("Additional Comments"),
WebPartStorage(Storage.Shared)]
public string EmployeeComments
{
get { return _employeeComments; }
set { _employeeComments = value; }
}
}