【问题标题】:.NET web form drop down list resets on postback.NET Web 表单下拉列表在回发时重置
【发布时间】:2014-09-17 01:38:21
【问题描述】:

我已经搜索了一堆类似的问题并进行了一些谷歌搜索,但我找不到我的问题的答案...

我想要一个由数据库中的类别填充的下拉列表...在选择一个类别并点击提交后,gridview 将填充该类别中的所有项目。

现在,一切正常,除了当我在类别下拉框中选择任何内容时,它会立即重置为第一个选择。所以我无法向gridview提交除第一个以外的任何值。我在这个项目上使用自动回发。我也尝试过使用 appenddatabounditems,但这只是用越来越多的相同条目填充列表......

如果有人能告诉我如何让下拉列表在回发后保持其位置,我会很高兴?

Selected Category:
    <asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="True" ViewStateMode="Enabled">
    </asp:DropDownList>
    <asp:Button ID="buttonCategorySubmit" runat="server" OnClick="buttonCategorySubmit_Click" Text="Submit" />
    <br />

</div>
    <asp:GridView ID="CategoryGridView" runat="server">
    </asp:GridView>
    <br />

 protected void Page_Load(object sender, EventArgs e)
    {
        PopulateCategorySelection();
    }

    public void PopulateCategorySelection()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnString"]);
        SqlCommand cmd = new SqlCommand("AllCategories", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        conn.Open();
        SqlDataReader ddlValues = cmd.ExecuteReader();
        ddlCategory.DataSource = ddlValues;
        ddlCategory.DataValueField = "CategoryID";
        ddlCategory.DataTextField = "Title";
        ddlCategory.DataBind();

        conn.Close();


    }

    protected void buttonCategorySubmit_Click(object sender, EventArgs e)
    {
        PopulateCategoryTable();
    }

    public void PopulateCategoryTable()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["Connstring"]);
        SqlCommand cmd = new SqlCommand("SelectCategory", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@Selected", ddlCategory.SelectedItem.Value);

        conn.Open();

        SqlDataAdapter adapter = new SqlDataAdapter();
        DataSet ds = new DataSet();
        adapter = new SqlDataAdapter(cmd);
        adapter.Fill(ds);
        conn.Close();
        CategoryGridView.DataSource = ds.Tables[0];
        CategoryGridView.DataBind();

        conn.Close();
    }

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    我确实只是解决了每个人...对于遇到相同问题的任何人,您需要在 page_load 方法中检查页面是否正在加载,因为正在生成新页面,或者信息正在回发为用户。如果它只是回发,我们不想再次填充类别下拉框。所以我们在 page_load 方法中使用 IsPostBack 对象,像这样:

     if (!IsPostBack) 
            {
                PopulateCategorySelection();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      相关资源
      最近更新 更多