1

私はこれを理解しようと探していましたが、正しい用語を使用していないか、答えが見つからないだけです。これが見つからなかったことをお詫びする前に質問され、回答された場合-回答がすでにそこにある場合は、リンクをいただければ幸いです。

カスタムプロパティ(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; }
    }
}
4

1 に答える 1

0

WebパーツがMicrosoft.SharePoint.WebPartPages.Webpartを継承している場合は、SPWebPartManagerクラスを使用して、 SaveChangesメソッドを確認してください。

しかし、正しいアプローチは、EditorPartクラスから継承するコントロールを作成することであり、ユーザーがこの次のプロパティを編集できるようにするか、Webパーツの編集パネルで編集できないかを決定すると思います。カスタム編集パネルを返すには、CreateEditorPartsメソッドもオーバーライドする必要があります。WebBrowsable(false)また、デフォルトのエディタテキストボックスが生成されないように、属性も設定する必要があります。

于 2012-12-03T11:57:29.803 に答える