2013-12-13 3 views
2

У меня есть класс с именем «admin» в моем проекте asp.net C#.
Это:Как получить атрибуты объекта из сеанса

public class Admin 
{ 
    private int ID; 
    private string FirstName, LastName, IsMainAdmin, Email, Username, 
      Password,BirthDate, EntryDate; 

    public int id 
    { 
     get { return ID; } 
     set { ID = value; } 
    } 

    public string firstname 
    { 
     get { return FirstName; } 
     set { FirstName = value; } 
} 

    public string lastname 
    { 
     get { return LastName; } 
     set { LastName = value; } 
    } 
    . 
    . 
    . 

После входа в сеанс создается следующим образом:

Admin admin = isAdmin(username, password); 
    if (admin != null) 
    { 
     **Session.Add("maskanAdmin", admin);** 
     Response.Redirect("panel.aspx"); 
    } 

В другой странице мне нужно получить идентификатор админа от сеанса в коде позади секции после запроса страницы с помощью JQuery AJAX.
Обратите внимание, что мой код метода - [WebMethod], который не поддерживает объект сеанса.
Могу ли я получить его? Как?

+1

Это охватывается в документации сессии: http://msdn.microsoft.com/en-us/library/ms178581.aspx – CodingIntrigue

+0

Я буду скажу вам еще кое-что. Объявление класса выглядит не очень хорошо! private int _id; и 'public int Id { get {return _id; } set {_id = value; } } 'или простой' public int ID {get; set;} '. Взгляните на [Правила именования] (http://msdn.microsoft.com/en-us/library/xzf533w0.aspx) –

+0

Да, это правильно. –

ответ

5
var adminObj = (Admin)Session["maskanAdmin"];  
if(adminObj != null) 
{ 
    var id = adminObj.id; 
    var fname = adminObj.firstname; 
} 

подробнее о Read Values from Session State

Обновление

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

Однако взглянуть на Using ASP.NET Session State in a Web Service

+0

Вы получаете доступ к поиску коллекции с помощью индексатора дважды. Вы также дважды проверяете значение null. В этом нет необходимости. Вы могли бы просто выполнить: 'var adminObj = (Admin) Session [" maskanAdmin "]; if (adminObj! = null) {...} ' – Silvermind

+0

@Silvermind: Не стесняйтесь редактировать ответ :) Я был не совсем уверен. Вот почему проверили оба места. –

1

Вам просто нужно, чтобы бросить его обратно к объекту Admin типа при извлечении его из сессии:

Admin admin = (Admin)Session["maskanAdmin"]; 

Затем вы можете использовать свойство объекта, как обычно:

if(admin.ID == someOtherID) 
{ 
    // do stuff 
} 
1
var adminObj = Session["maskanAdmin"]; 
if(adminObj != null) 
{ 
    var admin = (Admin)adminObj; 
} 
+0

Admin - это класс, поэтому проверка перед нулевым значением действительно не нужна до кастинга. – Silvermind

+1

@Silvermind - Похоже, я узнаю что-то новое каждый день. Просто протестируйте его, и вы правы. Я думал, что ошибка кастинга возникнет, если adminObj был пустым, и я попытался передать объект Admin. –

+0

'null' исправлен. Все, что есть «null», указывает на одно и то же местоположение, поэтому вам не нужно опасаться бросать объект с нулевым значением в «null» здесь :). Простой пример LinqPad: 'object a = null; \t string b = null; \t (a == b) .Dump(); '// True – Silvermind

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