У меня есть страница aspx, содержащая дочерний элемент ascx, и я обнаружил, что обработчик OnLoad
никогда не происходит на дочернем элементе управления ascx. Фактически, никаких событий не происходит в дочернем или родительском элементе управления, за исключением события OnUnload
в дочернем элементе управления.Управление OnLoad никогда не происходит, но OnUnload делает
Моя страница называется CrystalViewer.aspx
, наследующая от System.Web.UI.Page
, с переопределением для OnLoadComplete
под. Эта страница содержит CrystalReport.ascx
как дочерний элемент управления.
Markup
<div>
<uc1:CrystalReport id="CrystalReport1" runat="server" />
</div>
Мой контроль ребенок называется CrystalReport.ascx
, унаследовав от PortalModuleBase
в DotNetNuke.Entities.Modules
пространстве имен. Этот дочерний элемент управления содержит мультивизию, в котором первое представление позволяет вам выбрать параметры для передачи отчета, а во втором - 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 от клиента к тому, который работает в разработчике, и они в значительной степени идентичны за исключением строк соединения. Я думал, что, возможно, была настроена конфигурация Crystal Reports, поэтому мы полностью ее переустановили, и мы по-прежнему получаем ту же ошибку. Я не уверен, где искать дальше, и я как бы ожидаю услышать, как это выглядит после перезапуска сервера, поэтому я прошу об этом, чтобы увидеть, видел ли кто-нибудь что-то подобное, где события OnLoad
не огонь, но OnUnload
... Это просто странно, что он пытался загрузить что-то, когда он никогда не загружал его, и я понятия не имею, почему он не загружается.
Edit: Наш класс CrystalReport наследует от MvcContainer(Of Controllers.OnDemandReportController)
, который наследует от DotNetNuke.Entities.Modules.PortalModuleBase
OnLoad обработчик CrystalReport никогда не выстреливает, поэтому он никогда не называет базовые классы OnLoad, так что контроллер для класса CrystalReport является Nothing
, и взрывается.
Вы можете разместить полный код, скорее всего, контроллер не получает набор –
Я на самом деле уверен, что контроллер не установлен. В фрагменте OnUnload есть комментарий, который указывает, что контроллер «ничего», когда он достигает строки 'RemoveHandler controller.ReportDocumentChanged, AddressOf ReportDocumentChanged'. Я обновляю сообщение этой информацией, но класс CrystalReport наследуется от пользовательского 'MvcContainer (Of Controllers.OnDemandReportController)', а MvcContainer наследуется от 'DotNetNuke.Entities.Modules.PortalModuleBase'. – Zack
@MitchelSellers Проблема, для меня, что мне нужно выяснить, почему «OnLoad» элемента управления не работает. Именно здесь инициализируется 'controller', поэтому я вижу текущую ошибку« NullReferenceException », когда пытается удалить обработчик из пустого контроллера. – Zack