控制 OnLoad 永远不会发生,但 OnUnload 会发生
Control OnLoad never happens, but OnUnload does
我有一个包含 ascx 子控件的 aspx 页面,我发现 OnLoad
处理程序从未发生在子 ascx 控件上。实际上,子控件或父控件中没有发生任何事件,除了子控件中的 OnUnload
事件。
我的页面名为 CrystalViewer.aspx
,继承自 System.Web.UI.Page
,并覆盖了 OnLoadComplete
子页面。此页面包含 CrystalReport.ascx
作为子控件。
标记
<div>
<uc1:CrystalReport id="CrystalReport1" runat="server" />
</div>
我的子控件名为 CrystalReport.ascx
,继承自 DotNetNuke.Entities.Modules
命名空间中的 PortalModuleBase
。此子控件包含一个多视图,其中第一个视图允许您 select 参数传递给报表,第二个视图包含 CrystalReportViewer
.
<asp:View ID="ViwReport" runat="server">
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" Width="350px" Height="50px" HasCrystalLogo="False" SeparatePages="True" />
</asp:View>
我有 OnLoad
、OnUnload
的重载,每个都登录。
当我在本地导航到 http://localhost/portal/Modules/Reports/CrystalViewer.aspx?data=O%2b3zhvKVeiMG1qKIK6HGm0ONmAKh336xgBBOzfSVwqH%3d
时,出现以下错误。
NullReferenceException: Object reference not set to an instance of an object.
Reports.CrystalReport.OnUnload(EventArgs e) +401
System.Web.UI.Control.UnloadRecursive(Boolean dispose) +159
System.Web.UI.Control.UnloadRecursive(Boolean dispose) +322
System.Web.UI.Control.UnloadRecursive(Boolean dispose) +322
System.Web.UI.Page.UnloadRecursive(Boolean dispose) +23
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11538542
System.Web.UI.Page.ProcessRequest() +269
System.Web.UI.Page.ProcessRequest(HttpContext context) +167
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 625
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270
这是 OnUnload
覆盖的一个片段,显示了该方法在爆炸之前达到了多远,因为控制器变量是 Nothing
。
Protected Overloads Overrides Sub OnUnload(ByVal e As EventArgs)
Using Log.UI.Trace("CrystalReport.OnUnload")
Log.UI.Send("RemoveHandler controller.ReportDocumentChanged, AddressOf ReportDocumentChanged")
Log.UI.Send("controller", controller)
RemoveHandler controller.ReportDocumentChanged, AddressOf ReportDocumentChanged
'^ blows up here on controller.ReportDocumentChanged because controller is Nothing
'... that is the last log message I see, so I'm sure that is what the error here is from
End Using
End Sub
我一直在比较来自客户端的 web.config 和在开发中工作的 web.config,除了连接字符串之外,它们几乎完全相同。我认为可能有一些 Crystal 报告配置被我们搞砸了,所以我们完全重新安装了它,但我们仍然得到同样的错误。
我不确定下一步该去哪里,我有点等着听他们重启服务器后的情况,所以我问这个是想看看是否有人看到过类似的东西,其中 OnLoad
事件不要开火,但 OnUnload
会开火。看起来很奇怪,它会尝试加载一些东西,而它从来没有首先加载它,而且我不知道为什么它无论如何都不加载。
编辑:我们的 Crystal 报告 class 继承自 MvcContainer(Of Controllers.OnDemandReportController)
,后者继承自 DotNetNuke.Entities.Modules.PortalModuleBase
CrystalReport 的 OnLoad 处理程序从不触发,因此它从不调用基础 classes OnLoad,因此 CrystalReport class 的控制器是Nothing
,然后爆炸。
我今天通过修改OnUnload
代码来调用控制器初始化逻辑来解决这个问题,这样它就不会得到NullReferenceException
,这暴露了[=13]的根本原因=] 处理程序从来没有 运行.
web.config中有一个程序集绑定重定向,如下
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
我们使用 Crystal 报告,它试图调用 System.Web.Extensions
4.0 版本中存在的方法,而 3.5 版本中不存在该方法。
这是向我展示了如何修复我看到的错误消息的post。
Method 'get_EnableCdn' in type 'System.Web.UI.ScriptManager' from assembly 'System.Web.Extensions' does not have an implementation
我有一个包含 ascx 子控件的 aspx 页面,我发现 OnLoad
处理程序从未发生在子 ascx 控件上。实际上,子控件或父控件中没有发生任何事件,除了子控件中的 OnUnload
事件。
我的页面名为 CrystalViewer.aspx
,继承自 System.Web.UI.Page
,并覆盖了 OnLoadComplete
子页面。此页面包含 CrystalReport.ascx
作为子控件。
标记
<div>
<uc1:CrystalReport id="CrystalReport1" runat="server" />
</div>
我的子控件名为 CrystalReport.ascx
,继承自 DotNetNuke.Entities.Modules
命名空间中的 PortalModuleBase
。此子控件包含一个多视图,其中第一个视图允许您 select 参数传递给报表,第二个视图包含 CrystalReportViewer
.
<asp:View ID="ViwReport" runat="server">
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" Width="350px" Height="50px" HasCrystalLogo="False" SeparatePages="True" />
</asp:View>
我有 OnLoad
、OnUnload
的重载,每个都登录。
当我在本地导航到 http://localhost/portal/Modules/Reports/CrystalViewer.aspx?data=O%2b3zhvKVeiMG1qKIK6HGm0ONmAKh336xgBBOzfSVwqH%3d
时,出现以下错误。
NullReferenceException: Object reference not set to an instance of an object.
Reports.CrystalReport.OnUnload(EventArgs e) +401
System.Web.UI.Control.UnloadRecursive(Boolean dispose) +159
System.Web.UI.Control.UnloadRecursive(Boolean dispose) +322
System.Web.UI.Control.UnloadRecursive(Boolean dispose) +322
System.Web.UI.Page.UnloadRecursive(Boolean dispose) +23
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11538542
System.Web.UI.Page.ProcessRequest() +269
System.Web.UI.Page.ProcessRequest(HttpContext context) +167
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 625
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270
这是 OnUnload
覆盖的一个片段,显示了该方法在爆炸之前达到了多远,因为控制器变量是 Nothing
。
Protected Overloads Overrides Sub OnUnload(ByVal e As EventArgs)
Using Log.UI.Trace("CrystalReport.OnUnload")
Log.UI.Send("RemoveHandler controller.ReportDocumentChanged, AddressOf ReportDocumentChanged")
Log.UI.Send("controller", controller)
RemoveHandler controller.ReportDocumentChanged, AddressOf ReportDocumentChanged
'^ blows up here on controller.ReportDocumentChanged because controller is Nothing
'... that is the last log message I see, so I'm sure that is what the error here is from
End Using
End Sub
我一直在比较来自客户端的 web.config 和在开发中工作的 web.config,除了连接字符串之外,它们几乎完全相同。我认为可能有一些 Crystal 报告配置被我们搞砸了,所以我们完全重新安装了它,但我们仍然得到同样的错误。
我不确定下一步该去哪里,我有点等着听他们重启服务器后的情况,所以我问这个是想看看是否有人看到过类似的东西,其中 OnLoad
事件不要开火,但 OnUnload
会开火。看起来很奇怪,它会尝试加载一些东西,而它从来没有首先加载它,而且我不知道为什么它无论如何都不加载。
编辑:我们的 Crystal 报告 class 继承自 MvcContainer(Of Controllers.OnDemandReportController)
,后者继承自 DotNetNuke.Entities.Modules.PortalModuleBase
CrystalReport 的 OnLoad 处理程序从不触发,因此它从不调用基础 classes OnLoad,因此 CrystalReport class 的控制器是Nothing
,然后爆炸。
我今天通过修改OnUnload
代码来调用控制器初始化逻辑来解决这个问题,这样它就不会得到NullReferenceException
,这暴露了[=13]的根本原因=] 处理程序从来没有 运行.
web.config中有一个程序集绑定重定向,如下
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
我们使用 Crystal 报告,它试图调用 System.Web.Extensions
4.0 版本中存在的方法,而 3.5 版本中不存在该方法。
这是向我展示了如何修复我看到的错误消息的post。
Method 'get_EnableCdn' in type 'System.Web.UI.ScriptManager' from assembly 'System.Web.Extensions' does not have an implementation