会话结束和重新启动会阻止DropDownList_SelectedIndexChanged触发

时间:2015-05-14 16:01:19

标签: c# asp.net session webforms

有没有理由说明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.
}

我留下了一个空的表格,因为它没有重新填充......

提前致谢,

中号

修改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()方法填充数据Repeater,应该在排序下拉列表的索引更改(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.
}

3 个答案:

答案 0 :(得分:2)

我经历过类似的事情,不得不使用Page_PreRender事件来实现解决方法。

在您的情况下,您可以测试PopulateItems()是否已经运行,如果没有在预渲染中运行它。

答案 1 :(得分:0)

我认为原因可能在于身份验证设置。由于重置身份验证,会话过期后的回发可能会导致您进入登录页面。

甚至重定向也可以透明地完成,重定向到登录页面后,您将丢失最近的回发请求中指定的所有Post参数。

这意味着ASP.NET无法检测哪个控件触发了回发(它依赖于EVENTTARGET参数),因此不会触发SelectedIndexChanged事件。

答案 2 :(得分:0)

            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();
        }