Sharepoint上的WebPart连接。 - 使用哪种类型?

时间:2009-05-13 15:39:43

标签: sharepoint sharepoint-2007 web-parts

我写了一个示例webpart,它接受从orher webpart传递的参数,并在标签上显示其值。这是代码:

[Guid("11a885e9-13e1-4c6e-8045-e5575794ebd8")]
public class DisplayParameter : System.Web.UI.WebControls.WebParts.WebPart
{
    protected Label _label = new Label();
    private string _message; 

    [ConnectionConsumer("Parameter to show")]
    public void GetWPConnectedProviderInterface(IWebPartField connectProvider)
    {
        FieldCallback callback = FieldCallback;
        connectProvider.GetFieldValue(callback);
    }

    private void FieldCallback(object fieldValue)
    {
        _message = (string)fieldValue;
    }

    protected override void OnPreRender(EventArgs args)
    {
        if (string.IsNullOrEmpty(_message))
            _label.Text = "No Message.";
        else
            _label.Text = _message;
    }

    protected override void CreateChildControls()
    {
        base.CreateChildControls();
        Controls.Add(_label);
    }
}

然后我将WP放在页面上,并使用SPD生成DataView WP,以便将文件名从Doc库传递给WP。
它第一次正常工作,但是当我选择另一个文档时,我得到以下例外:

  

无法将“Test.Assembly.SharepointProject.DislayParameter”类型的对象强制转换为“Microsoft.SharePoint.WebPartPages.WebPart”。

这让我觉得...... 我是否必须从Microsoft.SharePoint.WebPartPages.WebPart而不是System.Web.UI.WebControls.WebParts.WebPart?继承,如果是, 有什么缺点,因为MSDN和博主建议使用后一类?

1 个答案:

答案 0 :(得分:1)

我从未真正同意不使用特定于SharePoint的特定于webpart的子类 - 反对它的唯一原因是允许Web部件在SharePoint以外的容器中运行 - 这在理论上很好,但我从未参与过一个项目,其中Web部件有可能在SharePoint之外使用。

在SharePoint 2003中存在一种不同类型的Web部件(早于.NET 2.0 Web部件 - 这是绝对不应该使用的部分),这个问题也可能有点模糊不清。