2010-08-17 3 views
0

Я использую Seesion в моем проекте, в котором хранится useTypeID (admin, manager и т. Д.), А для backoffice может вводиться только администратор и менеджер, поэтому на каждой странице моего backoffice в в первой строке я проверить, если seesion является послойно живым и только тогда пользователь может войти на страницу:Странная проблема с сеансом и DDL

if (!EmployeeSession.IsAuthenticated || EmployeeSession.GetEmployeeType != 1 && EmployeeSession.GetEmployeeType != 2) 
     Response.Redirect("Default.aspx"); 

тот же код для всех страниц ... и все они работают отлично.

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

Я отлаживал это и, как я вижу, это только из-за DDL, может быть, или у меня есть какая-то другая проблема, которую я не вижу?

Это код в файле .aspx:

<td><asp:DropDownList ID="ddlAreasSearch" runat="server" /></td> 

Это код в файле .cs:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!EmployeeSession.IsAuthenticated || EmployeeSession.GetEmployeeType != 1 && EmployeeSession.GetEmployeeType != 2) 
     Response.Redirect("Default.aspx"); 

    if (Page.IsPostBack) 
     return; 

    DataSet ds = UiHelper.InitDDL(
         ddlAreasSearch, 
         0, 
         "AreaName", 
         "AreaID", 
         ConfigurationManager.AppSettings["ConnStr"], 
         "spAreas_Select" 
        ); 

} 

UiHelper только для заполнения DDL с staic функции :

public static DataSet InitDDL(DropDownList ddl, Int16 DataSetTableIndex, string DataTextField, string DataValueField, string ConnectionString, string CommandName, params SqlParameter[] Params) 
{ 
    DataSet ds = DbHelper.ExecuteDataSet(ConnectionString, CommandName, Params); 
    ddl.DataSource = ds.Tables[DataSetTableIndex]; 
    ddl.DataTextField = DataTextField; 
    ddl.DataValueField = DataValueField; 
    ddl.DataBind(); 

    return ds; 
} 

линия, звонит эта страница (только HREF ... ничего особенного, и agian, у меня есть около 20 о þér то же, что ар работает ... и когда это не постбэк из DDL каждая вещь работает прекрасно, только после постбэк я ищу сеанс):

<div><a href="SearchAreasWithDDL.aspx">חיפוש אזור</a></div> 

Я буду рад дать любого другой код, если neccesery, но, как я вижу, это код, который создает все проблемы ... И, как я уже сказал, все остальные страницы делают то же самое, единственная разница - это DDL ....

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

10x

+0

Вы можете разместить код через который вы попадаете на эту страницу с выпадающим списком? Можете ли вы также подтвердить, комментируя выпадающую страницу на этой странице, если сеанс сохранен правильно или все еще потерян? – InSane

+0

Я не понял последнюю часть того, что вы просили, но если бы я сделал то, когда я не проверяю сеанс, страница работает отлично ... и для другого кода ... я отправляю его ... 10x – Erez

+0

То, что я пытался спросить вас, заключается в том, что если вы удалите раскрывающийся список из SearchAreasWithDDL.aspx, то если вы перейдете с этой страницы на другую страницу, будет ли сеанс сохранен или он потеряется? См. То, что я пытаюсь выяснить, является ли проблема действительно чем-то связана с выпадающим списком или нет. Возможно, вы можете загрузить весь код для SearchAreasWithDDL.aspx где-то и опубликовать ссылку ..., которая может помочь !! – InSane

ответ

0

Я нашел решение, проблема была не becouse из DDL, это было becouse двух вещей ...

  1. у меня есть LinkButton сделать редирект на EXIT и я использовал URL там, а также некоторый код в btnClick в CS-файле, а URL-адрес сильнее, чем CS-файл, когда я удалил URL-адрес из aspx, это было нормально, но все еще есть проблемы с безопасностью с кнопкой beck и написанием бесплатного URL-адреса поэтому я использовал эти линии для решения проблемы, и теперь каждая вещь отлично работает ...

    Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Now.AddDays (-1d); Response.Expires = -1500; Response.CacheControl = "no-cache"; if (! EmployeeSession.IsAuthenticated || EmployeeSession.GetEmployeeType! = 1 & & EmployeeSession.GetEmployeeType! = 2) Response.Redirect ("По умолчанию.ASPX ");

Эти строки остановить кэширование страниц в браузере и в прокси как для HTTP 1.0 и 1.1, так что это должно работать ...

10x

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