我遇到了以下问题:
我使用ToolPart创建了一个WebPart, 此工具包有多个控件(文本框,下拉列表,...) 当我填写所有内容并申请时,一切顺利, 即使我按下确定。但是当我回去的时候 编辑 - >修改webpart,我输入的所有数据都消失了。 我该如何解决这个问题?
由于
答案 0 :(得分:1)
您需要在webpart的属性中保存Toolpart中的值。例如,假设我想为“标题”保存一个字符串...在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”将所有 w eb p art 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();
}
}
答案 1 :(得分:0)
打开调试器并仔细检查值是否已应用于Apply上的属性(即设置了WPPColumnTitle)。
如果是这样,那么问题是SharePoint没有将属性(WPPColumnTitle)中的值序列化/反序列化到数据库并返回 - 通过在Web部件上写出此属性来验证 - 只要您离开页面并返回它将是空的。
如果是,那么在课堂上检查这样的事情
[XmlRoot(Namespace = "YourNamespace")]
和(非严格必要的)属性
[XmlElement(ElementName = "ColumnTitle")]
如果您将Web部件类命名为“WebPart”,我也会遇到问题,因此将其命名为MyWebPart
答案 2 :(得分:0)
我已经通过在我的webpart“IsNeverSet”(bool)中添加一个属性来解决它 当我去我的工具部分的“CreateControls()”时,我得到了这个属性 如果它是假的,我从我的webpart加载所有属性并将它们填入工具部分。 所以我在Kit Menke的帮助下找到了它。