Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 会话结束并重新启动会阻止DropDownList\u SelectedIndexChanged触发_C#_Asp.net_Session_Webforms - Fatal编程技术网

C# 会话结束并重新启动会阻止DropDownList\u SelectedIndexChanged触发

C# 会话结束并重新启动会阻止DropDownList\u SelectedIndexChanged触发,c#,asp.net,session,webforms,C#,Asp.net,Session,Webforms,是否存在ASP.NET会话结束和重新启动会干扰阻止在dropdownlist上触发SelectedIndexChanged事件的原因 表单正在发回,但未命中我的断点 在会话重新启动之前,一切都正常工作 以下是控件的asp: <asp:DropDownList ID="dlSort" runat="server" AutoPostBack="true" onselectedindexchanged="dlSort_SelectedIndexChanged

是否存在ASP.NET会话结束和重新启动会干扰阻止在dropdownlist上触发SelectedIndexChanged事件的原因

表单正在发回,但未命中我的断点

在会话重新启动之前,一切都正常工作

以下是控件的asp:

<asp:DropDownList ID="dlSort" runat="server" AutoPostBack="true" 
                  onselectedindexchanged="dlSort_SelectedIndexChanged">
</asp:DropDownList>
我留下了一张空表格,因为它不会被重新填充

提前感谢,

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方法填充数据中继器,并应在排序下拉列表的索引更改上运行sort_SelectedIndexChanged-虽然正在发生回发,但这不会发生

Page_Load执行一个填充dlSort的方法,该方法始终在运行

我已经广泛地检查了页面,除了索引更改事件之外的所有内容都被触发了

编辑3:


我也经历过类似的情况,必须使用Page_PreRender事件实现一个解决方案来克服它


在您的情况下,您可以测试PopulateItems是否已经运行,如果没有在pre-render中运行。

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

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


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

方法PopulateItems中是否使用了任何会话变量?谢谢,是的,使用了会话变量,但通过在访问单个变量之前检查初始化会话的对象访问会话。主要问题是,在会话丢失并重新建立后,dlSort_SelectedIndexChanged根本不会触发。请发布执行DDL初始填充的代码。可能相关的事项:在页面生命周期的何处填充,例如页面加载?是否仅当IsPostBack为false时才填充?是否启用了ViewState?您的症状表明回发中未填充DDL。@Joe see edits-Page_Load,IsPostBack为false,ViewState为enabled。@Mack-panelsort.Visible=true in PopulateSort下拉列表看起来可疑。这意味着回发时它可能为false,在这种情况下,面板中包含的DDL可能无法从ViewState重新填充。还有,拼写错误dlSoryBy.DataBind只是一个输入错误吗?嗨@ohoundj,我已经暂时实现了类似的功能,但我想了解并克服潜在的问题。奖励赏金作为解决办法已经到位,而且似乎很成功,然而,我仍然对根本原因感兴趣,并对任何进一步的评论感兴趣。我现在正在尝试EVENTTARGET,稍后将发布结果。我已经使用@SurajSingh在这篇文章中的答案实现了代码来检查EVENTTARGET,这确实是错的。点击页面加载,然后不运行dlSort\u SelectedIndexChanged,点击页面预渲染。看起来很奇怪,只是用同样的方法在一个干净的项目上检查了一下,它似乎工作正常-即使在会话过期后事件也会成功触发。您能否检查会话结束后PageLoad中的项目是否已填充?所有控件都已填充。Hi@Suttipasanga此代码似乎填充了一个下拉列表,这不是我遇到的问题,故障是会话重新启动后回发时未触发下拉列表的SelectedIndexChanged事件。
            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();
        }
void Session_Start(object sender, EventArgs e)
{
    InitialiseCommonSessionVariables();//This piece of code sets default values for session variables that are used in every case.
}
            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();
        }