गतिशील रूप से भरा DropDownList पोस्टबैक ASP.net c#पर मान नहीं रखता है




drop-down-menu postback (5)

अपने मार्क अप से आपने दूसरी ड्रॉप डाउन पर ऑटोपोस्टबैक प्रॉपर्टी सेट नहीं की है तो दूसरी पोस्ट डाउन इंडेक्स बदल गया है, जब तक कि इसे वापस पोस्ट नहीं किया जाना चाहिए (जब तक कि आप प्रोग्राम को एक पोस्ट वापस नहीं बनाते हैं)।

मैंने आपके कोड को मेरे समाधान में कॉपी किया है, ऐसा लगता है कि व्यवहार करना ...

<asp:Label ID="lblErr" runat="server"></asp:Label>
<asp:DropDownList ID="ddlTypePN" runat="server" EnableViewState="true"
    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)
            {
                ListItemCollection items = new ListItemCollection();
                items.Add(new ListItem("PNT", "PNT"));
                items.Add(new ListItem("PNC", "PNC"));

                ddlTypePN.DataSource = items;
                ddlFctPN.DataBind();
                ddlTypePN.DataBind(); // The ddl that populate my 2nd ddl

                ddlTypePN.Items.Insert(0, new ListItem("Sélectionnez...", "null"));
            }
        }

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

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

        protected void ddlTypePN_DataBound(object sender, EventArgs e)
        {

        }

        protected void ddlFctPN_DataBound(object sender, EventArgs e)
        {

        }

        void populateDdl()
        {

            ddlFctPN.Items.Clear();
            lblErr.Visible = false;

            try
            {
                ListItemCollection items = new ListItemCollection();
                items.Add(new ListItem("One", "1"));
                items.Add(new ListItem("Two", "2"));
                items.Add(new ListItem("Three", "3"));

                ddlFctPN.DataSource = items;
                ddlFctPN.DataBind();
            }
            catch (Exception ex)
            {
                lblErr.Text = ex.Message;
                lblErr.Visible = true;
            }


            ddlFctPN.Items.Insert(0, new ListItem("Sélectionnez...", "null"));

        }

    }

https://code.i-harness.com

3 संपादित करें: फिक्स्ड!

मुझे अंत में पाया गया कि समस्या क्या थी। प्रत्येक नियंत्रण जहां एएसपी में: तालिका, और मुझे पोस्टबैक के बाद मान रखने में सक्षम होने के लिए इस तालिका पर EnableViewState = "true" था।

उत्तर के लिए सभी को धन्यवाद!

सबसे पहले, मुझे क्षमा करें अगर मेरी अंग्रेजी सही नहीं है, लेकिन मैं यथासंभव सबसे सटीक होने की कोशिश करूंगा। कल के बाद से मैं अपनी समस्या से लड़ रहा हूं और एक जवाब के लिए वेब पर खोज रहा हूं ..

मेरे पास एक ऐसा फ़ॉर्म है जो "एक नया प्रोफ़ाइल बनाएं" के लिए किया जाता है इस फ़ॉर्म में मेरे पास कुछ ड्रॉपडाउन सूची और पाठ बॉक्स हैं, मेरी समस्या ड्रॉपडाउन सूची के बारे में है

4 ड्रॉपडाउन मेरे पृष्ठ पर हैं

चलो 2 पिछले ड्रॉपडाउन पर ध्यान दें:

पहला ड्रॉपडाउन डायनामिक रूप से अपने मूल्य के फ़ंक्शन में दूसरा एक पॉप्युलेट करता है।

यह चित्र देखें : http://image.noelshack.com/fichiers/2013/22/1369819471-picture-help.png

1 डीडीएल:

<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> 

पॉप्युलेट विधि:

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

}

जब मैं अपने द्वितीय डीडीएल में एक आइटम का चयन करता हूं और एक पोस्टबैक होता है (भले ही यह अन्य ड्रॉपडाउन सूची से मैंने पहले उल्लेख किया हो, तब भी), चयनित वैल्यू पहला मान हो जाता है। ( "Selectionnez ...")

ऐसा लगता है कि मेरी 2 ड्रॉपडाउन प्रत्येक पोस्टबैक पर बाध्य है, भले ही यह मेरी पहली ड्रॉपडाउन के चयनित इंडेक्स की वजह से नहीं है .. चयनित इंडेक्स 1 ड्रॉपडाउन को बदलकर हमेशा पोस्टबैक पर कॉल किया जाता है और इसलिए प्रत्येक पोस्टबैक पर "पॉप्युलेट डीडीएल ()" फेंकता है (यदि कोई मान चूना गया)।

जब मैं सबमिट बटन पर क्लिक करता हूं, तो यह मेरे डेटाबेस में एक रिक्त मूल्य दर्ज करता है।

मैं क्या खो रहा हूँ?

EDIT1:

यहां पेजलोड है:

    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

        }
    }

और यहां 1 डीडीएल का चयन किया गया है।

    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

आप देख सकते हैं कि मेरा दूसरा डीडीएल ("फ़ोनक्शन") सही ढंग से भरे हुए है लेकिन जब मैं सबमिट बटन पर क्लिक करता हूं: मान शून्य मान हो जाता है ("सेप्नेग्ज़ ...") और इसलिए मेरे आवश्यक फ़ाइल्डवैयलेटर पृष्ठ को मान्य नहीं बनाता है!


आप हर पोस्ट में जनसंख्या डीडी 1 हैं

इस प्रयोग से बचने के लिए

if(!IsPostBack)    
 {
   populateDdl();
 }

यू कैस्केडिंग ड्रेपडाउन की तरह उपयोग कर सकते हैं:

<ajaxToolkit:CascadingDropDown ID="CDD1" runat="server"
    TargetControlID="DropDownList2"
    Category="Model"
    PromptText="Please select a model"
    LoadingText="[Loading models...]"
    ServicePath="CarsService.asmx"
    ServiceMethod="GetDropDownContents"
    ParentControlID="DropDownList1"
    SelectedValue="SomeValue" />

if(!IsPostBack)

 {

  populateDdl();

 }

ठीक है solucion

<script type="text/javascript">
    function MtCambioRegion() {
        // con JQUERY



        //var regionId = $('#<%= ddlregion.ClientID %>').val();
        // sin JQUERY
        var regionId = document.getElementById('ContentBody_ddlRegion').value;
       //  var regionId = document.getElementById('ContentBody_CtrContenedoAjax_ddlRegion').value
       // alert('metodo region : ' + regionId );
        GetCitiesOfRegion(regionId);
    }

    function GetCitiesOfRegion(regionId) {
        // alert('Funcion ' + regionId );
        var actionData = "{'regionId': '" + regionId + "'}";
        $.ajax({
            type: "POST",
            url: "WebTespRegionComuna.aspx/GetProComunas",
            data: actionData,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (r) {
                var ddlComuna = $("[id*=ddlComuna]");
                ddlComuna.empty().append('');

                $.each(r.d, function () {
                    ddlComuna.append($("<option></option>").val(this['id']).html(this['nombre']));
                });
            }
        });

    }

    function FnSelComuna() {
        var x = document.getElementById("ContentBody_ddlComuna").value;
        // alert(x);
        document.getElementById('ContentBody_txtComunaHiden').value = x;
    }

// फॉर्म्युलर एएसपीएक्स

Public Class WebTespRegionComuna
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        'ControlSystema.GetSearhRegionList(ddlRegion)

        Dim _ControlSystema As New ControlSystema
        With _ControlSystema
            .MtRegionList(ddlRegion)
        End With
        _ControlSystema = Nothing


    End If

End Sub


<System.Web.Services.WebMethod()> _
Public Shared Function GetProComunas(regionId As String) As List(Of ComunaList)
    Dim _ControlSystema As New ControlSystema
    Dim _lista As List(Of ComunaList)
    With _ControlSystema
        _lista = .GetSearchComunaList(regionId)
    End With
    _ControlSystema = Nothing
    Return _lista
End Function

Private Sub btnGuardarDatos_Click(sender As Object, e As System.EventArgs) Handles btnGuardarDatos.Click
    Try
        Dim valorcomuna As String = ddlComuna.SelectedValue
        valorcomuna = txtComunaHiden.Text


        Dim valorregion As String = ddlRegion.SelectedValue.ToString()
        Dim _valor As String = "punto de quiebre"

    Catch ex As Exception

    End Try
End Sub End Class




postback