Как получить значение сеанса и выполнить проверку на другой странице в asp.net

#c# #asp.net #session

#c# #asp.net #сеанс

Вопрос:

  reader = server.ExecuteReader(CommandType.Text, getPermissionlistQuery, param);
        var results = new List<string>();
        while (reader.Read())
        {
            results.Add(reader["permissionName"].ToString());
        }
        reader.Close();
        Session.Add("Permissions", results);
  

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

результаты — это список значений

 var permissionList = Session["Permissions"];         
        string check = "Create Groups";
        if (permissionList.Any(item => item.Equals(check)))
        {
            // results contains the value in check 
        }
  

и я хочу проверить, доступно ли разрешение в списке разрешений, но оператор if выдает ошибку

 'object' does not contain a definition for 'Any' and no extension method 'Any' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
  

Комментарии:

1. Какую часть «НЕ ИСПОЛЬЗОВАТЬ ЭТОТ ТЕГ» в описании тега asp вы не поняли?

Ответ №1:

ОБНОВЛЕНО: измените нижний код на этот:

 IList<String> collection = (IList<String>) Session["Permissions"];

string check = "Create Groups";

if (collection.Any(item => item.Equals(check)))
{
   // results contains the value in check 
}
  

Кроме того, ссылка:

 using System.Collections.Generic;
using System.Linq;
  

введите описание изображения здесь

Комментарии:

1. Исправил ваш код для вас. Спасибо за ответ, он привлек мое внимание :).

Ответ №2:

Просто позвоните String value = (String)Session["Key"]; , чтобы получить значение

Session["Key"] извлечет значение в сеансе для этого ключа. Если ключ не существует, он вернет Null.

Возможно, вы захотите прочитать ASP.NET Сессия тоже.

Обновить

В ответ на ваше редактирование убедитесь, что у вас есть ссылки на Linq для вашего проекта. Any — это расширение Linq.

Комментарии:

1. @John обновил ответ. Any — это метод расширения, добавленный Linq. Убедитесь, что у вас есть System.Core.dll в качестве ссылочной сборки для вашего проекта и инструкции Using System.Linq; вверху.

Ответ №3:

Похоже, что список разрешений заполняется, т.Е. Код для извлечения данных из сеанса работает нормально. Если бы это было не так, вы бы получили исключение NullReference.

Я предполагаю, что настоящим виновником является ключевое слово «var». Когда вы извлекаете список разрешений из сеанса, он извлекается как «Объект». Попробуйте явно использовать объект permissionList, т.е.

 List<string> permissionList = Session["Permissions"]; 
  

или

 var permissionList = (List<string>)Session["Permissions"];