0

我想在呈现 ASCX 文件的参数搜索 portlet 中包含 ReportViewer 控件。

我将 RDLC 文件放在内容存储库中,并且它作为二进制流被正确检索

<%
....

//retrieve rdlc file 

string Path = "/Root/Global/renderers/ReportFiles/Report1.rdlc"

Node node = Node.LoadNode(Path);
var binaryData = node.GetBinary("Binary");
System.IO.Stream stream = binaryData.GetStream();

//setup report
ReportViewer1.ProcessingMode = ProcessingMode.Local;
ReportViewer1.LocalReport.LoadReportDefinition(stream);
ReportDataSource datasource = new ReportDataSource("Results", dsResults.Tables[0]);
ReportViewer1.LocalReport.DataSources.Add(datasource);

%>
<div id="rptvwr">
    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
    </asp:ScriptManagerProxy>

    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="600">
  </rsweb:ReportViewer>
</div>

这会导致“路径中的非法字符”错误消息。

在我稍微改变了我的代码之后,我现在有以下情况:

  • 当我使用<asp:Scriptmanager>ReportViewer 控件所需的标记时,我收到一条错误消息,指出每页只允许一个 ScriptManager

  • 当我使用<asp:ScriptManagerProxy>标签时,我收到一条错误消息,说明

    Portlet 错误:报表查看器 Web 控件需要 Web 表单上的 System.Web.UI.ScriptManager。

4

1 回答 1

3

页面上只能有一个ScriptManager控件,而SenseNet已经自动生成了一个,你无能为力。实际上它是一个名为SNScriptManager的自定义控件(它继承自默认的 scriptmanager 控件),页面模板管理器会自动将其放入生成的母版页中。所以你不能在你的 ascx 中手动放置另一个。

根据MSDN,如果您愿意,您仍然可以使用 ScriptManagerProxy 控件添加其他脚本。或者,您可以使用 SenseNet 提供的内置 sn:ScriptRequest 控件,它有助于捆绑 - 当然,所有这些都适用于您确切知道必须添加哪些脚本的情况。

也许ReportViewer控件寻找默认的脚本管理器并且不喜欢 SenseNet 使用的自定义(继承)的(我希望不是这种情况)。

(从您的问题中不清楚如果您不添加 sm 代理或任何其他标签会发生什么,因为最后两个项目符号都以“当我使用标签时...”开头 - 您在这里指的是哪个标签?)

第一条错误消息(“路径中的非法字符”)仍然相关吗?如果是,您能否添加更多详细信息,例如来自事件查看器的堆栈跟踪?

于 2016-10-13T19:41:19.287 回答