「新しいプロファイルを作成する」ためのフォームがあります。私の問題は DropDownLists に関するものです。
最初の DropDown は、その値の関数で 2 番目の DropDown に動的に入力します。
この写真を参照してください:
http://image.noelshack.com/fichiers/2013/22/1369819471-picture-help.png
そして次の写真。
http://image.noelshack.com/fichiers/2013/22/1369830738-help2.png
2 番目の ddl ("Fonction") が正しく入力されていることがわかりますが、送信ボタンをクリックすると、値が null 値 ("Sélectionnez...") になり、RequiredFieldValidator によってページが無効になります!
1 番目の DropDownList の SelectedIndexChanged が原因でなくても、2 番目の DropDownList はすべてのポストバックで制限されているようです。1 番目の DropDownList の SelectedIndexChanged は常にポストバックで呼び出されるため、PostBack ごとに「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"));
}