使用不安全控件时不呈现 SharePoint 页面

应用对象
SharePoint Server 2013 SP1 SharePoint Foundation 2013 SP1 Microsoft SharePoint Foundation 2010 Service Pack 2

症状

安装以下更新之一后,某些 SharePoint 页面不会呈现,并生成如下所示的错误消息:

注意

Web 部件错误:无法显示或导入此页上的 Web 部件或 Web 窗体控件。 找不到类型或未注册为安全类型。

原因

安装更新后,SharePoint 2010 和 SharePoint 2013 中将强制实施 ASP.NET 控件的允许列表。 如果 SharePoint 页面上的 Web 部件或控件未添加到允许列表,则页面不会呈现。

解决方法

如果页面不再呈现,因为它们使用的控件不在 SafeControls 列表中,请执行以下步骤:

  1. 查看 SharePoint 统一日志记录服务 (ULS) 日志 ,查找 9s9ay 标记或包含指示控件被阻止的“阻止控件的属性”的消息。

  2. 从错误消息中标识类型、命名空间和程序集强名称。

    • 示例 1

    给定以下错误消息:
    “找不到类型 Contoso.Customizations.WebPartControl、Contoso.WebParts、Version=1.0.0.0、Culture=neutral、PublicKeyToken=b03f5f8f11d50a3a 或未将其注册为安全。”
    Type = “WebPartControl”

    Namespace = “Contoso.Customizations”

    程序集强名称 = “Contoso.WebParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f8f11d50a3a”

    • 示例 2

    给定以下错误消息:
    “使用属性遍历标记阻止控件。 [tagName: SharePoint:WebPartControl][propName: propName1][type: typeName1]”
    Type = “WebPartControl” (不是 “typeName1”)

    可以通过查询类型名称在 Microsoft Docs 中找到命名空间和程序集数据。

  3. 将给定类型、命名空间和程序集强名称的新 SafeControls 元素添加到 configuration/SharePoint/SafeControls 元素下的 Web.config 文件,如 SafeControls 元素 (Solution) 中所述,然后将 Safe 属性设置为 TRUE。

有关 SafeControls 元素中属性值的格式的详细信息,请参阅在包Designer中标记安全控件的步骤 12 中的表。

解决方法

如果有许多不安全的控制措施,可以按照以下步骤解决此问题:

  1. 编辑 configuration/SharePoint 元素下的 Web.config 文件中的 SafeMode 元素。
  2. 添加值为 True 的 ControlCompatMode 属性。

警告

我们不建议使用此解决方法,因为它允许运行不安全 ASP.net 控件。