属性损失 webpart toolpart moss 2007

Posted

技术标签:

【中文标题】属性损失 webpart toolpart moss 2007【英文标题】:Loss of properties webpart toolpart moss 2007 【发布时间】:2011-05-12 03:11:24 【问题描述】:

我遇到了以下问题:

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

谢谢

【问题讨论】:

【参考方案1】:

您需要将工具部件中的值保存在 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();
    

【讨论】:

我已经拿到了。但我的问题是当我申请或按确定时,然后返回到我的 webpart 的编辑模式,我的所有属性都恢复为默认值......也许当我进入编辑模式时我需要覆盖我的 webpart 中的一个函数? Erm - 你还有问题吗?答案被标记为正确,所以不确定。 @Ruben,抱歉忘记了使用用户之前的选择初始化 Toolpart 的部分。看起来你无论如何都能让它工作。为了完整起见,我更新了我的答案。:)【参考方案2】:

打开调试器并仔细检查这些值是否正在应用到您的属性中(即设置了 WPPColumnTitle)。

如果是这样,那么问题是 SharePoint 没有将属性 (WPPColumnTitle) 中的值序列化/反序列化到数据库并返回 - 通过在 Web 部件上写出此属性进行验证 - 只要您离开页面并返回它将是空的。

如果是这样,请在课堂上检查类似的内容

[XmlRoot(Namespace = "YourNamespace")]

这(不是绝对必要的)属性

[XmlElement(ElementName = "ColumnTitle")]

如果您将 Web 部件类命名为“WebPart”,我也看到了一些问题,因此将其命名为 MyWebPart

【讨论】:

【参考方案3】:

我已经通过在我的 Web 部件“IsNeverSet”(布尔)中添加一个属性来解决它 当我转到工具部分的“CreateControls()”时,我得到了这个属性 如果它是假的,我会从我的 webpart 中加载所有属性并将它们填充到 toolpart 中。 所以我在 Kit Menke 的帮助下找到了它

【讨论】:

以上是关于属性损失 webpart toolpart moss 2007的主要内容,如果未能解决你的问题,请参考以下文章

从 Kentico 中的自定义类访问 Webpart 属性

通过回调更新 WebPart

如何在 SharePoint 2010 沙盒可视 WebPart 上创建可编辑属性

SPFX Webpart 属性窗格在 MS Teams 个人选项卡中不可见

csharp 具有一个可自定义属性的简单SharePoint WebPart示例

用于 SharePoint 的 QlikView webpart 不在属性窗格中显示对象