Окончание и перезапуск сеанса предотвращает отключение DropDownList_SelectedIndexChanged

Есть ли причина, по которой завершение и перезапуск сеанса ASP.NET будет мешать (предотвращать) запуск события SelectedIndexChanged в раскрывающемся списке?

Форма отправляется обратно, но моя точка останова не попадает?

Все работает отлично до перезапуска сеанса.

Здесь asp для управления:

<asp:DropDownList ID="dlSort" runat="server" AutoPostBack="true" 
                  onselectedindexchanged="dlSort_SelectedIndexChanged">
</asp:DropDownList>

Здесь часть кода:

protected void dlSort_SelectedIndexChanged(object sender, EventArgs e)
{
    PopulateItems();
    //Breakpoint above- not hit after session restarts, but hit prior to session end.
}

У меня оставлена ​​пустая форма, так как она не заселяется...

Спасибо заранее,

M

Изменить 1:

Вот код, в котором заполняется элемент управления:

protected void Page_Load(object sender, EventArgs e)
{
    Form.Action = Request.RawUrl;//Required as page is rewritten
    if (!IsPostBack)
    {
        SetNoItemsMessage("");
        PopulateSortDropDown();
        PopulateItems();
    }
}

private void PopulateSortDropDown()
{
    clsProducts ops = new clsProducts();
    DataTable dt = ops.GetProductSortDropDownData();
    dlSortBy.DataSource = dt;
    dlSortBy.DataBind();
    dlSortBy.ClearSelection();
    dlSortBy.SelectedValue = "1";
}

Изменить 2:

Чтобы уточнить, метод PopulateItems() заполняет ретранслятор данных и должен запускаться при изменении индекса сортировки (dlSort_SelectedIndexChanged) - этого не происходит, хотя происходит обратная передача.

Page_Load выполняет метод, который заполняет dlSort, это всегда выполняется.

Я просмотрел страницу широко и все, кроме события изменения индекса, срабатывает.

Изменить 3:

void Session_Start(object sender, EventArgs e)
{
    InitialiseCommonSessionVariables();//This piece of code sets default values for session variables that are used in every case.
}

Ответ 1

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

В вашем случае вы можете проверить, запущен ли PopulateItems(), и если он не запускается в предварительном рендеринге.

Ответ 2

Я думаю, что причина может заключаться в настройках аутентификации. После истечения срока действия вашей учетной записи вы можете перейти на страницу входа в систему из-за reset аутентификации.

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

Это означает, что ASP.NET не сможет определить, какой элемент управления активировал пост-обратно (он полагается на параметр EVENTTARGET) и, следовательно, не будет запускать событие SelectedIndexChanged.

Ответ 3

            ASP.Net Code :
       ---------------

    <asp:DropDownList ID="ddList" runat="server" AutoPostBack="True" Height="65px" OnSelectedIndexChanged="ddList_SelectedIndexChanged" Width="198px">
        </asp:DropDownList>


C# Code :
---------

 public void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                dropdown();
            }
        }
.
<your code goes here> ....

public void dropdown()
        {
            //String Sql statement
            string Sqlstr = "select CountryCode,Description from ca_countryMaster order by description";


            string DBCon = "Data Source=RAJA;Initial Catalog=CareHMS;Integrated Security=True;";
            SqlConnection SqlCon = new SqlConnection(DBCon);
            SqlCon.Open();

            SqlDataAdapter Sqlda = new SqlDataAdapter(Sqlstr, SqlCon);
            DataSet ds = new DataSet();
            Sqlda.Fill(ds);
            ddList.DataSource = ds.Tables[0];
            ddList.DataTextField = "Description";
            ddList.DataValueField = "CountryCode";
            ddList.DataBind();

            ds.Dispose();
            Sqlda.Dispose();
            SqlCon.Close();
        }