1

这个问题可能有一个非常简单的解决方案,但由于我根本不了解 Sharepoint,而且似乎无法通过谷歌搜索我的智慧之路,也许你们中的一个人可以引导我朝着正确的方向前进。

背景:目前我在一个项目中工作,我们的 Web 解决方案的一部分是由 Sharepoint 构成的,我之前完全没有来自 Sharepoint 的经验。最近,我一直在为看似非常简单的任务而苦苦挣扎,将(网络)用户控件添加到我们解决方案中的一个 Sharepoint 页面。这项任务有两个重要要求;

  • 用户控件和代码隐藏必须位于并组成一个单独的程序集
  • 该大会必须签署

用户控件程序集实际上是另一个带有 Default.aspx 的 ASP.NET Web 应用程序,所以我可以使用 Cassini 的模型来调试用户控件。当我通过 Default.aspx 调试它时,它工作正常,显示用户控件,我可以按预期使用它。

我的 web.config 中有这些行:

<SafeControls>
[..]
<SafeControl Assembly="MyMainNamespace.SubNamespace.SelectorPopup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7fa78676161515a2" Namespace="MyMainNamespace.SubNamespace.SelectorPopup" TypeName=" *" Safe=" True " />
[..]
</SafeControl>

在 Sharepoint 页面上,我输入了以下内容:

<% @Register TagPrefix= "Selector" Namespace="MyMainNamespace.SubNamespace.SelectorPopup" Assembly="MyMainNamespace.SubNamespace.SelectorPopup" %>
[..]
<Selector:SelectorBoxControl runat="server" SelectorType="ContentArea" ></ Selector: SelectorBoxControl>

我们的项目是部署在 IIS6 (Windows Server 2003) 上的 .NET 3.5 (2.0) 上的 ASP.NET Web 项目,我们使用的是 Sharepoint 2007、SQL Server 2005。构建、部署和 Visual Studio 标记都很好。

问题:部署到我们的测试环境后,Sharepoint 页面上根本不显示用户控件,我不知道为什么。

构建和部署工作正常,甚至显示 Sharepoint 页面,只是我的控件无处可见。实际上,HTML 响应完全不包含我的用户控件的痕迹。即使我在控件中放置了纯 HTML 文本并且没有任何功能。没有错误消息,并且事件处理程序没有提供有关可能的错误或警告的信息。

我错过了什么吗?有什么我需要启用的,我需要添加的属性或某处的引用吗?无论如何我可以让这种非显示行为生成一个可以理解的错误消息吗?

4

2 回答 2

0

我将其发布为答案,因为尽管我们交换了评论,但我不确定您和我一直在谈论同一件事。

如您所知,ASP.NET 中有两种控件,用户控件和 Web 自定义控件。 用户控件有一个包含标记的 .ascx 文件,并且 - 这很重要 - 不能在项目之间共享。编译他们所在的项目并引用该程序集没有好处,因为 .ascx 文件不是程序集的一部分。Web自定义控件没有标记文件:它们完全是在代码中创建的,它们的控件以编程方式创建并添加到自定义控件的 Controls 集合中。

因此,您要替换的单独程序集中的第三方控件是 Web 自定义控件,或者 - 如果它在其源中使用单独的标记文件 - 它必须使用一种技巧,例如虚拟路径提供程序技巧,以实现这一目标。

您谈到了用户控件和代码隐藏,就好像它们是分开的一样,这让我相信您确实在谈论 Web 用户控件。但是这些根本无法在 Web 项目之间共享。如果您的控件需要存在于外部程序集中,最简单的做法是将其重写为以编程方式构建其内容的自定义控件。

还有其他选项,例如Virtual Path Provider解决方案,或 Scott Guthrie 的著名解决方案(此处)。但最简单的选择是将其编写为自定义控件。

于 2012-10-05T17:12:57.810 回答
0

我认为您需要向 GAC 注册您的 dll 以便 SharePoint 找到它。我可能在那里错了,复制到 bin 目录就可以了。但我很确定您在注册时需要在 Assembly 属性中使用完全限定名称。

<% @Register TagPrefix= "Selector" Namespace="MyMainNamespace.SubNamespace.SelectorPopup" Assembly="MyMainNamespace.SubNamespace.SelectorPopup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7fa78676161515a2" %>
于 2012-10-01T14:16:35.680 回答