微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态填充DropDownList不会在回发ASP.net上保留值c#

编辑3:固定!

我终于找到了问题所在.
每个控件都在asp:Table中,我必须在此表上使用EnableViewState =“true”才能在回发后保留值.

谢谢大家的答案!

首先,请原谅我,如果我的英语不完美,但我会尽量做到最精确.
我从昨天开始就在解决我的问题,并一直在网上寻找答案.

我有一个表格,用于“创建新的个人资料”.在这种形式我有一些DropDownLists和TextBoxes,我的问题是关于DropDownLists.

4 DropDown在我的页面上.

让我们关注最后一个DropDown:

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

看到这张图:
http://image.noelshack.com/fichiers/2013/22/1369819471-picture-help.png

一个ddl:

<asp:DropDownList ID="ddlTypePN" runat="server" DataSourceID="sqlTypePN" EnableViewState="true" 
        DataTextField="libelle" DataValueField="valeur" AutopostBack="true" OnSelectedindexChanged="ddlTypePN_SelectedindexChanged" 
        OnDataBound="ddlTypePN_DataBound" > </asp:DropDownList>

第二个ddl:

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

填充方法

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"));

}

当我在第二个ddl中选择一个项目并且发生PostBack时(即使它来自我之前提到过的其他下拉列表),SelectedValue成为第一个值. ( “Selectionnez ……”)

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

当我单击“提交”按钮时,它会在我的数据库注册一个空白值.

我错过了什么?

 编辑1:

这是PageLoad:

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

        }
    }

这是第一个ddl SelectedindexChanged:

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


    }

 编辑2:

见下图:

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

你可以看到我的第二个ddl(“Fonction”)被正确填充但是当我点击提交按钮时:该值变为空值(“Sélectionnez…”),因此我的requiredFieldValidator使页面无效!

解决方法

if(!IsPostBack)

 {

  populateDdl();

 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐