我写了一个示例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和博主建议使用后一类?
答案 0 :(得分:1)
我从未真正同意不使用特定于SharePoint的特定于webpart的子类 - 反对它的唯一原因是允许Web部件在SharePoint以外的容器中运行 - 这在理论上很好,但我从未参与过一个项目,其中Web部件有可能在SharePoint之外使用。
在SharePoint 2003中存在一种不同类型的Web部件(早于.NET 2.0 Web部件 - 这是绝对不应该使用的部分),这个问题也可能有点模糊不清。