Как обрабатывать нулевой сеанс в сценарии Java - PullRequest
0 голосов
/ 10 октября 2019

Есть ли способ выйти из этой ошибки. Я знаю, что это null, но я уже вставил try catch в него, почему он все еще показывает ошибку, и условие, если оно равно null, но ошибка все еще показывает, что моя сессия пуста. вот мой код:

 try {

           if ('<%=Session["Selected"].ToString()%>' == null) {
               loadTimesheetgrid();
           }
           else {

               if ('<%=Session["Selected"].ToString()%>' == 'More Than 60 Hrs') {
                   //call the script you will make for morethan 60 hrs
               }
               else {
                   loadTimesheetgrid();
               }
           }
       }
       catch (error) {
           loadTimesheetgrid();
       }

Отображается ошибка:

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Если ваше значение сеанса равно нулю, оно не сможет преобразовать его, пока .ToString () Так что лучше сначала проверить, является ли оно пустым или имеет какое-либо значение, если оно только потом пытается преобразовать его в строку.

if ('<%=Session["Selected"]%>' != null) 
     {
               if ('<%=Session["Selected"].ToString()%>' == 'More Than 60 Hrs') 
                   {
                      //call the script you will make for morethan 60 hrs
                   }
              else {              
                      loadTimesheetgrid();               
                   }
     }
else {              
                   loadTimesheetgrid();               
     }

Я бы посоветовал вам не помещать блоки try и catch в ваш файл представления, так как иногда, если он не работает, он загружает частичные элементы html, и вы можете столкнуться с некоторыми проблемами выравнивания. Однако вы можете заключить код в блоки try и catch.

try
{
if ('<%=Session["Selected"]%>' != null) 
         {
                   if ('<%=Session["Selected"].ToString()%>' == 'More Than 60 Hrs') 
                       {
                          //call the script you will make for morethan 60 hrs
                       }
                  else {              
                          loadTimesheetgrid();               
                       }
         }
    else {              
                       loadTimesheetgrid();               
         }
}
catch(error)
{
loadTimesheetgrid();
}
0 голосов
/ 10 октября 2019

Я предполагаю, что вы используете ASP.Net с учетом вашей истории сообщений.

Что касается вашего вопроса, здесь есть две проблемы. Во-первых, Session["Selected"] является нулевым на стороне сервера, поэтому вызов ToString() для этого является причиной вашей ошибки. Если вы используете C # 6, тогда вы можете использовать оператор объединения нулей для возврата строки. Если нет, то вам понадобится отдельное условие if.

Во-вторых, вам нужно сравнить значение с пустой строкой в ​​JS на стороне клиента, поскольку '' никогда не будет равно null.

Вот полный пример:

try {
  if ('<%= (Session["Selected"] ?? "").ToString() %>' === '') {
    loadTimesheetgrid();
  } else {
    if ('<%= (Session["Selected"] ?? "").ToString() %>' === 'More Than 60 Hrs') {
      //call the script you will make for morethan 60 hrs
    } else {
      loadTimesheetgrid();
    }
  }
} catch (error) {
  loadTimesheetgrid();
}

Зависит от вашего варианта использования. Вы можете рассмотреть возможность предоставления значения сеанса для View с использованием ViewModel, чтобы немного СУШИТЬ это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...