c# - 动态填充的 DropDownList 不会在回发时保留值

标签 c# asp.net drop-down-menu postback

我有一个用于“创建新配置文件”的表单。我的问题是关于 DropDownLists。

第一个 DropDown 根据其值动态填充第二个。

看这张图:

http://image.noelshack.com/fichiers/2013/22/1369819471-picture-help.png

以及下图:

http://image.noelshack.com/fichiers/2013/22/1369830738-help2.png

您可以看到我的第二个 ddl(“Fonction”)已正确填写,但是当我单击提交按钮时,该值变为空值(“Sélectionnez...”),因此我的 RequiredFieldValidator 使页面无效!

似乎我的第二个 DropDownList 在每次回发时都受到限制,即使这不是因为我的第一个 DropDownList 的 SelectedIndexChanged。 第一个 DropDownList 的 SelectedIndexChanged 总是在回发时调用,因此它会在每个回发时抛出“populateDdl()”(如果选择了一个值)。

当我点击提交按钮时,它在我的数据库中注册了一个空白值。

我错过了什么?

Aspx代码:

<asp:DropDownList ID="ddlTypePN" runat="server" DataSourceID="SqlTypePN" EnableViewState="true" 
        DataTextField="libelle" DataValueField="valeur" AutoPostBack="true" OnSelectedIndexChanged="ddlTypePN_SelectedIndexChanged" 
        OnDataBound="ddlTypePN_DataBound" > </asp:DropDownList> 

<asp:DropDownList runat="server" ID="ddlFctPN" AppendDataBoundItems="false" OnDataBound="ddlFctPN_DataBound" > </asp:DropDownList> 

代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ddlTypeProf.DataBind(); // don't care
        ddlSsoSrc.DataBind(); // don't care
        ddlTypePN.DataBind(); // The ddl that populate my 2nd ddl
    }
}

protected void ddlTypePN_SelectedIndexChanged(object sender, EventArgs e)
{
    string type = ddlTypePN.SelectedValue.ToString().Trim();
    // if PNT
    if (type.ToUpper().Trim().Equals("PNT"))
    {               
        ddlFctPN.Enabled = true;
        ddlTypeAv.Enabled = true;
        rfvTypeAv.Enabled = true;
        populateDdl();

    }
    else if (type.ToUpper().Trim().Equals("PNC"))
    {                
        ddlFctPN.Enabled = true;
        ddlTypeAv.Enabled = false;
        rfvTypeAv.Enabled = false;
        populateDdl();
    }     
}

void populateDdl()
{
    string val = "fct"+ddlTypePN.SelectedValue.ToString().Trim(); // Used for SELECT
    SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["My_DB"].ConnectionString);
    ddlFctPN.Items.Clear();
    DataTable subjects = new DataTable();
    try
    {
        SqlDataAdapter adapter = new SqlDataAdapter("My SELECT", sqlConn);
        adapter.Fill(subjects);

        ddlFctPN.DataSource = subjects;
        ddlFctPN.DataTextField = "libelle";
        ddlFctPN.DataValueField = "valeur";
        ddlFctPN.DataBind();
    }
    catch (Exception ex)
    {
        lblErr.Text = ex.Message;
    }
    ddlFctPN.Items.Insert(0, new ListItem("Sélectionnez...", "null"));
}

最佳答案

if(!IsPostBack)

 {

  populateDdl();

 }

关于c# - 动态填充的 DropDownList 不会在回发时保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810626/

相关文章:

c# - 将 WPF Button CommandParameter 绑定(bind)到 DataTemplate 中的 Button 本身

c# - 防止在 C# 中重绘控件?

asp.net - 从 URL 获取图像并上传到 Amazon S3

javascript - ASP.NET - 使用 Javascript 在 LinkBut​​ton 上编辑 CommandName

javascript - 自动生成下拉列表

html - CSS- 导航下拉菜单未正确对齐

c# - 如何调用 IEnumerable 函数

c# - 指定 T 应该是接口(interface)的泛型

asp.net - 将 SVN 与 Visual Studio 2003 集成

javascript - Aurelia 选择禁用