我现有的 Web 部件在 SharePoint 中不起作用

Posted

技术标签:

【中文标题】我现有的 Web 部件在 SharePoint 中不起作用【英文标题】:My existing webparts won't work in SharePoint 【发布时间】:2010-11-12 09:49:22 【问题描述】:

我有一个标准的 ASP.NET 2.0 网站。 它有一个网页。 我的 Company.Web.dll 中有一个 Web 部件,我显示在我网站的 Web 部件页面上。一切都很好!

我想在 SharePoint 2007 中使用同一个 Web 部件。

我在 VS2008 中有一个使用 SharePoint 1.2 扩展的“站点定义”项目。我尝试了各种方法将 Web 部件从外部程序集添加到我的站点定义中。我已经能够部署 webpart(它被添加到 webpart 页面的 webpart 列表中),但我未能成功地将它添加到页面。

我光荣的失败:

    创建了一个 shell webpart 来只显示现有的 web 部件,基本上只是将我的部件用作控件。 在创建新 webpart 时尝试修改 VS2008 创建的 X.webpart 和 X.xml 文件。

在将 Web 部件添加到页面时,两者都会导致以下错误:

例外 Microsoft.SharePoint.WebPartPages.WebPartPageUserException: 无法导入 XXXX Web 部件。 在 Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(布尔 清除连接)在 Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager 经理,XmlReader 阅读器,布尔值 clearConnections,Uri webPartPageUri, SPWeb spWeb) 在 Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager 经理,XmlReader 阅读器,布尔值 clearConnections, SPWeb spWeb) 在 Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 事件参数)

我需要以特殊方式将现有 Web 部件添加到我的网站定义吗?

【问题讨论】:

您能否用实际问题编辑您的问题? Web 部件是不可用还是出现错误? (顺便说一句,您知道 VSeWSS 1.3:microsoft.com/downloads/…) 有人有点苦涩,我没有选择他们的答案,因为他们否决了所有其他答案。抱歉,我确实投票给了一些我认为有帮助的人。 【参考方案1】:

这听起来像是在部署时解决 GUID 的问题,您可以阅读有关 in this SO question 的信息。

【讨论】:

【参考方案2】:

要查找 Web 部件无法导入的详细信息,请查看 ULS 日志。这些通常位于%CommonProgramFiles%\Microsoft Shared\web server extensions\12\LOGS。当您尝试将 Web 部件添加到页面时,将在此处记录一个条目。这应该会给你更多的细节。

我的猜测是这是一个代码访问安全问题。您的 Web 部件必须经过强签名,并且需要 SharePoint Web 应用程序的 web.config 中的 SafeControl 条目。除了这些之外,您应该能够将它添加到全局程序集缓存以测试它是否有效(最佳实践是编写一个 CAS 策略文件)。详情请见Deploying Web Parts in Windows SharePoint Services。

在尝试将其集成为网站定义的一部分之前,我会先尝试这些步骤。那么至少您知道 Web 部件将实际运行。

此外,VSeWSS 真正设计用于从一开始就使用它来开发您的 Web 部件。如果您有原始源,您可以尝试使用 VSeWSS 创建一个新的 Web 部件,然后用您的自定义代码替换并更新 .webpart 和功能 XML 文件。然后它应该表现得更好一些。如果您还没有致力于 VSeWSS,请尝试 WSPBuilder,因为它不那么痛苦。

【讨论】:

如果我没记错我的 SP 管理员指南,被称为“12 Hive”? :P【参考方案3】:

ASP.NET webparts 和 Sharepoint Webparts 相同。您应该能够在 Sharepoint 中使用 ASPNET Webpart。见下表:

ASP.NET 2.0 Web 部件

满足大多数业务需求。 将您的 Web 部件分发到运行 ASP.NET 2.0 或 SharePoint 网站的网站。 当您想要在 SharePoint 网站上重复使用为 ASP.NET 2.0 网站创建的一个或多个 Web 部件时。 使用 Windows SharePoint Services 3.0 提供的数据或功能。例如,您正在创建一个使用网站或列表数据的 Web 部件。

基于 SharePoint 的 Web 部件

当您想要将一组使用基于 SharePoint 的 Web 部件基础结构的 Web 部件迁移到 Windows SharePoint Services 3.0 时。 创建跨页面连接。 在 Web 部件区域之外的 Web 部件之间创建连接。 使用客户端连接(Web 部件页面服务组件)。 使用允许缓存到内容数据库的数据缓存基础架构。

要使 Sharepoint webpart 在标准 ASPNET 应用程序中工作,您需要在没有 Sharepoint 2007 引用的情况下在 Visual Studio 中重新创建 webpart(作为 ASPNET webpart)才能正常工作。

我过去使用过的一个漂亮工具是 SmartPart 值得一试:

这使您可以在 Visual Studio 中(可视地)创建一个 ASP.NET 用户控件,然后将其托管在 Sharepoint 中。 smartpart 充当用户控件的包装器 wepart。可以把它想象成 Sharepoint 中的页面查看器 Web 部件,只不过它不是 html 页面,而是它的 ASP.NET 用户控件。

【讨论】:

不是真的。 “Windows SharePoint Services 完全支持从 ASP.NET WebPart 类派生的 Web 部件”msdn.microsoft.com/en-us/library/ms452873.aspx 注意到另一位反对者。如果您要投反对票,您至少可以发表评论吗?否则会很粗鲁。 其实 SharePoint 2007 完全兼容用 ASP.NET 2.0 编写的 WebPart。【参考方案4】:

您需要 WSS 3.0、SharePoint MOSS 或 2007 才能使用 ASP.NET 2.0 WebParts。 SharePoint 2003 或更低版本和 WSS 2.0 或更低版本不支持 ASP.NET WebPart。

【讨论】:

开发环境为WSS 3.0,生产环境为MOSS 2007。

以上是关于我现有的 Web 部件在 SharePoint 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Web 部件添加到 SharePoint 页面

在 sharepoint 中连接 Web 部件

嵌套用户控件在可视 Web 部件中不起作用

SharePoint 2010 Web 部件部署错误

如何在 SharePoint2013 的 SharePoint Web Access Web 部件中访问 Excel PROTECTED 电子表格?

如何在 SharePoint 框架 Web 部件中调用 SharePoint 搜索 API 以获取最近的新闻?