失去属性web部件工具部分苔藓2007

时间:2010-11-18 15:54:41

标签: sharepoint moss web-parts

我遇到了以下问题:

我使用ToolPart创建了一个WebPart, 此工具包有多个控件(文本框,下拉列表,...) 当我填写所有内容并申请时,一切顺利, 即使我按下确定。但是当我回去的时候 编辑 - >修改webpart,我输入的所有数据都消失了。 我该如何解决这个问题?

由于

3 个答案:

答案 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的帮助下找到了它。