2015-10-26 4 views
0

У меня есть отчет на странице, если я ухожу в течение 20 минут я получаю сообщение Ссылка на объект ошибка не указывает на экземпляр объектаСсылка на объект не указывает на экземпляр объекта в ReportViewer

AMFM.ReportViewer.GenerateReport(DataTable dt) in c:\Users\gorella\Documents\Visual Studio 2013\Projects\Web_Applications\AMFM\AMFM\ReportViewer.aspx.cs:76 

AMFM.ReportViewer.Page_Init(Object sender, EventArgs e) in c:\Users\gorella\Documents\Visual Studio 2013\Projects\Web_Applications\AMFM\AMFM\ReportViewer.aspx.cs:65 

Первая проблема: путь выше - это даже не профиль пользователя или путь, с которым я запускаю этот запуск.

Вторая проблема заключается в том, как избавиться от этой ошибки, когда пользователь попытался обновить страницу.

Этот код был скопирован из TFS. Это код в строке 65 и 76

private void Page_Init(object sender, EventArgs e) { 
    DataTable dt = (DataTable)Session["dataset"]; 

    String query = (String)Session["query"]; 
    //System.Diagnostics.Debug.WriteLine("********************" + query); 
    //System.Diagnostics.Debug.WriteLine("########################" + dt.Rows.Count.ToString()); 
    if (dt == null) { 
     System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ; 
    } 
    GenerateReport(dt); 
} 

protected void GenerateReport(DataTable dt) { 
    // Get the dataset from the session state. Passed in from Reports.aspx. 
    // This way the dataset is only generated once. 
    //Report treport = new Report(); 
    // Get the report node from the session state. Passed in from Reports.aspx 

    ReportTreeNode rn = (ReportTreeNode)Session["report"]; 

    System.Diagnostics.Debug.WriteLine(String.Format("### {0}", rn.Text)); 
    //Report r = new Report(); 
    System.Diagnostics.Debug.WriteLine(String.Format(" {0}", 
     rn.treport.ToString()) 
    ); 

    rn.treport.ReportParameters["title"].Value = rn.Text + " Report"; 
    rn.treport.ReportParameters["title2"].Value = rn.title2; 
    rn.treport.DataSource = dt; 
    TReportViewer1.ReportSource = rn.treport;  
    //TReportViewer1.Report = rn.treport; 
    // do a refresh if needed. 
    //TReportViewer1.RefreshReport(); 
} 

Нужна помощь по поиску и устранению неисправностей. Я, по крайней мере, хочу сделать это, если это исключение подходит для перенаправления на главную страницу

+1

мог сессию истекающий? создание '(String) Session [" query "];' нулевая ссылка? –

+0

Что вы предлагаете для разрешения? –

+0

Выполните нулевую проверку ключа сеанса, напишите в ответ. –

ответ

0

Ошибка может произойти из-за таймаута сеанса, который по умолчанию составляет 20 минут, а ваша переменная сеанса потеряет данные.

private void Page_Init(object sender, EventArgs e) { 
    DataTable dt; 

    String query = ""; 
    if (Session["query"] != null) { 
     query = (String)Session["query"]; 
    } 
    if (Session["dataset"] != null) { 
     dt = (DataTable)Session["dataset"]; 
     GenerateReport(dt); 
    } 
    else { 
     System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ; 
    } 
} 

Также в чеке метод GenerateReport для любых других переменных сеанса, как ReportTreeNode и т.д.

protected void GenerateReport(DataTable dt) { 
    ReportTreeNode rn; 
    if (Session["report"] != null) { 
     rn = (ReportTreeNode)Session["report"]; 
     rn.treport.ReportParameters["title"].Value = rn.Text + " Report"; 
     rn.treport.ReportParameters["title2"].Value = rn.title2; 
     rn.treport.DataSource = dt; 
     TReportViewer1.ReportSource = rn.treport;  
    } 
} 
+0

Если переменная сеанса равна null. Что мне следует включить в инструкцию else для устранения этого исключения/создания нового сеанса/или перенаправления на главную страницу? –

+0

Если 'Session [" query "]' равно null, это просто означает, что вам нужно будет присвоить значение переменной 'query'manually, если Session [" dataset "] равно null, это означает, что нет данных в' dataset' , перезагрузите свой набор данных и т. д., и это можно сделать иначе. Или перенаправить на главную страницу в блоке else просто используйте «Response.Redirect» или эквивалент согласно вашему требованию и подходу – haraman

+0

Когда я поставил Server.Transfer («Default.aspx»); по-прежнему перенаправляется на страницу с ошибкой –

0

Im не совсем уверен в этом, но это единственное, что я могу себе представить, это связано с количеством времени, которое вы отходите от страница, сеанс возможно, истекший на сервере.

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

private void Page_Init(object sender, EventArgs e) 
    { 
     DataTable dt = (DataTable)Session["dataset"]; 

     String query = "" 
     if(Session["query"]!= null){ 
      query = (String)Session["query"]; 
     } 
     if (dt == null) 
     { 
      System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ; 
     } 
     GenerateReport(dt); 
    } 

Тогда вам нужно сделать проверку на запрос, когда вы в следующий раз пойти, чтобы использовать его, чтобы убедиться, это не пустая строка.

В противном случае подключите к нему отладчик визуальных студий и пусть он покажет вам, откуда приходит нулевая ссылка.

я Wouldnt предложить перенаправлении ошибки в неинформативных домашнюю страницу, в то время как это может появиться более презентабельный его на самом деле просто грязная работа вокруг проблемы, которая нуждается в решении, и может сделать будущие проблемы труднее для исправления создания эффект снежного кома.

+0

Он дает исключение типа «Исключение System.NullReferenceException», произошедшее в AMFM.dll, но не обрабатывалось в коде пользователя в первой строке метода генерации отчета. –

+0

Используете ли вы внешнюю библиотеку или API? –

+0

Да внешняя библиотека –