【发布时间】:2011-05-12 03:11:24
【问题描述】:
我遇到了以下问题:
我用 ToolPart 创建了一个 WebPart, 此工具部分有多个控件(文本框、下拉列表...) 当我填写所有内容并申请时,一切顺利, 即使我按下确定。但是当我回到 编辑->修改webpart,我输入的所有数据都消失了。 我该如何解决这个问题?
谢谢
【问题讨论】:
标签: sharepoint moss web-parts
我遇到了以下问题:
我用 ToolPart 创建了一个 WebPart, 此工具部分有多个控件(文本框、下拉列表...) 当我填写所有内容并申请时,一切顺利, 即使我按下确定。但是当我回到 编辑->修改webpart,我输入的所有数据都消失了。 我该如何解决这个问题?
谢谢
【问题讨论】:
标签: sharepoint moss web-parts
您需要将工具部件中的值保存在 Web 部件的属性中。例如,假设我想为“Title”保存一个字符串...在 webpart 中定义一个属性:
private const string DEFAULT_WPPColumnTitle = "Title";
private string _WPPColumnTitle = DEFAULT_WPPColumnTitle;
[Browsable(false)]
[WebPartStorage(Storage.Shared)]
public string WPPColumnTitle
{
get { return this._WPPColumnTitle; }
set { this._WPPColumnTitle = value; }
}
我总是使用前缀“WPP”来将所有web p艺术p属性放在一起。
然后,在 Toolpart 的 ApplyChanges 覆盖中,将控件的值 (_ddlColumnsTitle) 保存到 webpart (WPPColumnTitle):
/// <summary>
/// Called by the tool pane to apply property changes to
/// the selected Web Part.
/// </summary>
public override void ApplyChanges()
{
// get our webpart and set it's properties
MyCustomWebPart et = (MyCustomWebPart)ParentToolPane.SelectedWebPart;
et.WPPColumnTitle = _ddlColumnsTitle.SelectedValue;
}
最后,如果用户已经编辑了属性,我们希望 Toolpart 预填充用户的配置。在 Toolpart 的 CreateChildControls() 方法中,初始化控件:
protected override void CreateChildControls()
{
try
{
MyCustomWebPart et = (MyCustomWebPart)ParentToolPane.SelectedWebPart;
// ... code to create _ddlColumnsTitle and add it to the Controls
// default our dropdown to the user's selection
ListItem currentItem = _ddlColumnsTitle.Items.FindByValue(et.WPPColumnTitle);
if (null != currentItem)
{
_ddlColumnsTitle.SelectedValue = currentItem.Value;
}
}
catch (Exception ex)
{
_errorMessage = "Error adding edit controls. " + ex.ToString();
}
}
【讨论】:
打开调试器并仔细检查这些值是否正在应用到您的属性中(即设置了 WPPColumnTitle)。
如果是这样,那么问题是 SharePoint 没有将属性 (WPPColumnTitle) 中的值序列化/反序列化到数据库并返回 - 通过在 Web 部件上写出此属性进行验证 - 只要您离开页面并返回它将是空的。
如果是这样,请在课堂上检查类似的内容
[XmlRoot(Namespace = "YourNamespace")]
这(不是绝对必要的)属性
[XmlElement(ElementName = "ColumnTitle")]
如果您将 Web 部件类命名为“WebPart”,我也看到了一些问题,因此将其命名为 MyWebPart
【讨论】:
我已经通过在我的 Web 部件“IsNeverSet”(布尔)中添加一个属性来解决它 当我转到工具部分的“CreateControls()”时,我得到了这个属性 如果它是假的,我会从我的 webpart 中加载所有属性并将它们填充到 toolpart 中。 所以我在 Kit Menke 的帮助下找到了它
【讨论】: