1

我一直在寻找试图弄清楚这一点,但要么我没有使用正确的术语,要么我只是没有找到答案。如果在我为没有找到它而道歉之前已经提出并回答了这个问题 - 如果答案已经存在,我将不胜感激。

我有一个带有自定义属性(webpart 类和用户控件)的可视化 webpart——所有这些都用 WebBrowsable(true)、WebPartStorage(Storage.Shared) 等属性进行了适当的装饰。为了完整起见,我还尝试了 Personalizable(Personalization.Shared)。我想做的是,我不想在标准的“编辑 Web 部件”界面中编辑这些 Web 部件属性,而是想根据当前用户是否是站点管理员来显示它们的编辑控件。

这就是我的问题所在:当我从用户控件设置自定义属性时,设置没有被保存。我在 webpart 类的 setter 方法中设置了一个断点,并验证了确实传递了一个值,但是当 webpart 在页面上重新加载时,设置恢复为空字符串的默认值。

我觉得我错过了一些基本步骤来保存这些设置。下面是一些片段来演示我正在使用的代码。显然,这不是整个代码,而只是说明我所处位置的相关部分。

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

如果您的 webpart 继承自Microsoft.SharePoint.WebPartPages.Webpart,您可以尝试使用SPWebPartManager类并查看SaveChanges方法。

但我认为正确的方法是创建从EditorPart类继承的控件,并决定用户是否应该能够编辑以下属性,或者不能在编辑 webpart 面板中编辑。您还应该覆盖CreateEditorParts方法以返回您的自定义编辑面板。哦,你还应该设置WebBrowsable(false)属性,这样就不会生成默认的编辑器文本框。

于 2012-12-03T11:57:29.803 回答