我一直在寻找这个想法,但要么我没有使用正确的术语,要么我只是没有找到答案。如果在我没有找到它之前已经被问到并回答了这个问题 - 如果答案已经在那里我会很感激。
我有一个带有自定义属性的可视化webpart(webpart类和用户控件) - 所有这些都使用WebBrowsable(true),WebPartStorage(Storage.Shared)等属性进行了适当的装饰。我也尝试过Personalizable(Personalization.Shared),只是为了完整性。我想要做的是,我不想在标准的编辑Web部件界面中编辑这些webpart属性,而是根据当前用户是否是站点管理员显示它们的编辑控件。
这就是我的问题所在:当我从用户控件设置自定义属性时,没有保存设置。我在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; }
}
}
答案 0 :(得分:0)
如果您的网站部分继承自Microsoft.SharePoint.WebPartPages.Webpart,您可以尝试使用SPWebPartManager课程,并查看SaveChanges方法。
但我认为正确的方法是创建控制,继承自EditorPart类,并决定用户是否应该能够编辑以下属性,或者不能编辑webpart面板。您还应该覆盖CreateEditorParts方法以返回自定义修改面板。哦,你还应该设置WebBrowsable(false)
属性,这样就不会生成默认的编辑器文本框。