2015-01-06 2 views
0

У меня есть страница 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, и взрывается.

+0

Вы можете разместить полный код, скорее всего, контроллер не получает набор –

+0

Я на самом деле уверен, что контроллер не установлен. В фрагменте OnUnload есть комментарий, который указывает, что контроллер «ничего», когда он достигает строки 'RemoveHandler controller.ReportDocumentChanged, AddressOf ReportDocumentChanged'. Я обновляю сообщение этой информацией, но класс CrystalReport наследуется от пользовательского 'MvcContainer (Of Controllers.OnDemandReportController)', а MvcContainer наследуется от 'DotNetNuke.Entities.Modules.PortalModuleBase'. – Zack

+0

@MitchelSellers Проблема, для меня, что мне нужно выяснить, почему «OnLoad» элемента управления не работает. Именно здесь инициализируется 'controller', поэтому я вижу текущую ошибку« NullReferenceException », когда пытается удалить обработчик из пустого контроллера. – Zack

ответ

0

Я решил эту проблему сегодня, изменив OnUnload код для вызова логики инициализации контроллера, так что он не получит NullReferenceException, которая подвергается первопричине почему OnLoad обработчики никогда не выполняются.

Был сборочный связывания перенаправлять в 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> 

Мы используем отчеты Кристал, и он пытается вызвать метод, который существует в версии 4.0 System.Web.Extensions, что Безразлично В версии 3.5 нет.

Это сообщение, которое показало мне, как исправить сообщение об ошибке, которое я видел.

Method 'get_EnableCdn' in type 'System.Web.UI.ScriptManager' from assembly 'System.Web.Extensions' does not have an implementation

Смежные вопросы