C# 单击“提交”按钮后,ASP.NET组合框为空

C# 单击“提交”按钮后,ASP.NET组合框为空,c#,asp.net,.net,C#,Asp.net,.net,我从数据库中加载Combobox。首先,当页面加载时,我的列表中会充满数据。 当我点击提交按钮时,我的列表变为空。 我在代码中做错了什么 public void ListCategory() { using (SqlConnection conn = new SqlConnection(CS)) { //SqlCommand cmd = new SqlCommand("select distinct category FROM ka

我从数据库中加载Combobox。首先,当页面加载时,我的列表中会充满数据。 当我点击提交按钮时,我的列表变为空。 我在代码中做错了什么

public void ListCategory()
    {
        using (SqlConnection conn = new SqlConnection(CS))
        {
            //SqlCommand cmd = new SqlCommand("select distinct category FROM kategorija", conn);
            conn.Open();


            SqlDataAdapter da = new SqlDataAdapter("select distinct category FROM kategorija", conn);
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            da.Fill(ds);

            ASPxComboBox1.Columns[0].Caption = "Категорија";
            ASPxComboBox1.Columns[0].FieldName = "Category";

            ASPxComboBox1.DataSource = ds;
            ASPxComboBox1.DataBind();         
        }
    }
在页面加载时,我也会这样做

protected void Page_Load(object sender, EventArgs e)
   {
       if (!IsPostBack)
       {
           ListCategory();
       }  
   }
试一试

试一试


当您按下按钮时,您正在执行
回发
。条件
(!IsPostBack)
表示“如果不是在回发之后,请执行此操作”。但是,您正在尝试进行回发,因此这种情况很愚蠢(因为当您进行回发时,会话中未包含的所有内容都将丢失)

您需要将其移出该状态:

protected void Page_Load(object sender, EventArgs e)
{
       if (!IsPostBack)
       {
           //Other stuff done only once during the page initialization
       }  

       ListCategory();
}

或者使用会话来记住组合框值。

当您按下按钮时,您正在执行
回发操作。条件
(!IsPostBack)
表示“如果不是在回发之后,请执行此操作”。但是,您正在尝试进行回发,因此这种情况很愚蠢(因为当您进行回发时,会话中未包含的所有内容都将丢失)

您需要将其移出该状态:

protected void Page_Load(object sender, EventArgs e)
{
       if (!IsPostBack)
       {
           //Other stuff done only once during the page initialization
       }  

       ListCategory();
}

或者使用会话来记住组合框值。

使用ASP.NET webforms ViewState,加载到表单中的数据将在回发后保留。因此,通常情况下,检查回发条件的代码是有效的,并且工作正常。但是,其他因素(如禁用viewstate或在代码的其他区域操纵控件)可能会影响回发后的结果

    protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.ViewStateMode = ViewStateMode.Disabled;//now a postback will lose data

        if (!IsPostBack)
        {
            GridView1.DataSource = new List<string> { "a", "b" };
            GridView1.DataBind();
        }

    }
受保护的无效页面加载(对象发送方,事件参数e)
{
GridView1.ViewStateMode=ViewStateMode.Disabled;//现在回发将丢失数据
如果(!IsPostBack)
{
GridView1.DataSource=新列表{“a”,“b”};
GridView1.DataBind();
}
}

在这种情况下,您可以删除
IsPostBack
检查或重新启用viewstate。如果问题出在您尚未显示的另一个代码区域,则最好通过使用ASP.NET webforms ViewState删除对
IsPostBack

的检查来修复该代码,而不是依赖低效的设计。请声明加载到表单中的数据将在回发后保留。因此,通常情况下,检查回发条件的代码是有效的,并且工作正常。但是,其他因素(如禁用viewstate或在代码的其他区域操纵控件)可能会影响回发后的结果

    protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.ViewStateMode = ViewStateMode.Disabled;//now a postback will lose data

        if (!IsPostBack)
        {
            GridView1.DataSource = new List<string> { "a", "b" };
            GridView1.DataBind();
        }

    }
受保护的无效页面加载(对象发送方,事件参数e)
{
GridView1.ViewStateMode=ViewStateMode.Disabled;//现在回发将丢失数据
如果(!IsPostBack)
{
GridView1.DataSource=新列表{“a”,“b”};
GridView1.DataBind();
}
}

在这种情况下,您可以删除
IsPostBack
检查或重新启用viewstate。如果问题在于您没有显示的另一个代码区域,那么最好修复该代码,而不是依赖低效的设计,方法是取消对
IsPostBack

的检查,将数据源绑定到
之外!回发
检查

将数据源绑定到
之外!回发
检查

必须将ListCategory()移到if(!IsPostBack)条件之外。这是因为您正在进行回发,因此显然不会再次输入数据。我假设您已禁用控件的viewstate?您必须将ListCategory()移到if(!IsPostBack)条件之外。这是因为您正在进行回发,因此显然不会再次输入数据。我假设您已禁用控件的viewstate?如何使用此会话?你能给我举个例子吗?这很有效。但是我丢失了所选的值。我需要获取所选值才能在查询中使用它。感谢you@Barlet您可以阅读如何使用此会话?你能给我举个例子吗?这很有效。但是我丢失了所选的值。我需要获取所选值才能在查询中使用它。感谢you@Barlet你可以读到