net mvc example ejemplos dropdownlist asp c# asp.net drop-down-menu postback

c# - example - dropdownlist mvc



llenado dinámico DropDownList no retiene valor en postback ASP.net c# (7)

EDIT 3: ¡FIJO!

Finalmente encontré cuál era el problema. Todos los controles estaban en un asp: Table, y tuve que EnableViewState = "true" en esta tabla para poder mantener el valor después de la devolución.

Gracias a todos por las respuestas !

En primer lugar, discúlpame si mi inglés no es perfecto, pero intentaré ser lo más preciso posible. Estoy luchando con mi problema desde ayer y he estado buscando en toda la web una respuesta.

Tengo un formulario que está hecho para "Crear un nuevo perfil". De esta forma tengo algunos DropDownLists y TextBoxes, mi problema es sobre DropDownLists.

4 DropDown están en mi página.

Vamos a centrarnos en los 2 últimos DropDown:

El primer DropDown llena dinámicamente el segundo en función de su valor.

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

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

2nd ddl:

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

Método de poblado:

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

Cuando selecciono un ítem en mi 2nd ddl y que ocurre un Postback (incluso si proviene de otras listas desplegables que mencioné antes), SelectedValue se convierte en el primer valor. ("Selectionnez ...")

Parece que mi 2nd DropDown está limitado en cada devolución, incluso si no es debido a SelectedIndexChanged de mi 1st DropDown. El SelectedIndexChanged the 1st DropDown siempre se llama en la devolución de datos y por lo que arroja "populateDdl ()" en cada PostBack (si es un valor es seleccionado).

Cuando hago clic en el botón de enviar, registra un valor en blanco en mi base de datos.

¿Qué me estoy perdiendo?

EDIT1:

Aquí está 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 } }

y aquí está 1st 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(); } }

EDICION 2:

Ver la siguiente imagen:

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

Puedes ver que mi 2nd ddl ("Fonction") está correctamente llena PERO cuando hago clic en el botón de enviar: el valor se convierte en el valor nulo ("Sélectionnez ...") y mi RequiredFieldValidator hace que la página no sea válida.


Desde su marcado no ha configurado la propiedad AutoPostBack en el segundo menú desplegable. Por lo tanto, no se debe activar una publicación cuando haya cambiado el segundo índice desplegable (a menos que esté generando una publicación de forma programática).

He copiado tu código en mi solución, parece que se está comportando ...

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

Y el código ...

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


U puede usar CascadingDropDown como:

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


poner este código bajo esta condición

if(!Page.IsPostBack) { // Your Code Here }


usted es población DD1 en cada publicación posterior

para evitar este uso

if(!IsPostBack) { populateDdl(); }


if(!IsPostBack) { populateDdl(); }


Después de muchas horas tratando de descubrir un problema similar y por qué mi menú desplegable no cambiaba, revisé mis datos y, aunque la información de DataTextField era diferente, los valores de DataTextValues ​​eran los mismos y solo estaba sacando el primero cada vez. Verifique sus datos y vea si tienen valores diferentes.


ok 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; }

// formulario aspx

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