Ciao ho un problema con una form di inserimento dati di cui riporto di seguito estratti di codice.
Il punto è che se modifico la selezione nella DDL prima di fare click su Salva, tutto bene, se invece genero un errore sul validatore e poi riseleziono un valore corretto l'evento di SelectedIndexChanged non viene catturato e quindi la seconda ddl non viene popolata.
.cs
.aspxcodice:protected void Page_Load(object sender, EventArgs e) { ddlApplicazioni.Attributes.Add("onchange", "return CambiaApplicazione('ddlApplicazioni','');"); txtUID.Attributes.Add("onchange", "ImpostaBtnSalva(true,true);"); if (!Page.IsPostBack) { CaricaUtenti(); // inizializza campi applicazione e ruolo InizializzaCampi(0); } } protected void ddlApplicazioni_SelectedIndexChanged(object sender, EventArgs e) { // ad ogni variazione compila di conseguenza il ddlRuolo int idapp = Convert.ToInt32(ddlApplicazioni.SelectedValue); // ruolo string strSQL = " SELECT RuoliApplicazioni.IDRuolo, Ruoli.Ruolo " + " FROM RuoliApplicazioni " + " INNER JOIN Ruoli ON RuoliApplicazioni.IDRuolo = Ruoli.IDRuolo " + " WHERE IDApplicazione = " + idapp.ToString(); FComuni fc = new FComuni(); fc.RiempieDDL(ddlRuolo, idapp.ToString(), _connDb, strSQL, false); }
codice:<script language="javascript" type="text/javascript"> var btnElimina_abilitato = false; var btnSalva_abilitato = false; // conferma il salvataggio function Salva() { if (btnSalva_abilitato) { avanti = confirm("Confermi le modifiche?"); if (avanti) { var idut = document.getElementById("ctl00_cphMain_hidID").value; if (idut == 0) { // nuovo var uid = document.getElementById("ctl00_cphMain_txtUID").value; // controlla se l'utente esiste già (uid) var esiste = false; var uids = ""; var nrighe = dgElencoUtenti.get_table().getRowCount(); for (i = 0; i < nrighe; i++) { uids = dgElencoUtenti.Data[i][1]; if (uids == uid) { esiste = true; break; } } if (esiste) { alert("L'utente risulta già presente nel database."); return false; } } Page_ClientValidate(''); return Page_IsValid; document.getElementById("ctl00_cphMain_hidAzione").value = "salva"; return true; } else return false; } else return false; } // validazione del controllo ddlApplicazioni function ControllaApplicazione(source, clientside_arguments) { var idut = document.getElementById("ctl00_cphMain_hidID").value; var uid = document.getElementById("ctl00_cphMain_txtUID").value; if (btnSalva_abilitato == false && uid != "") ImpostaBtnSalva(true, true); var ddlApp = document.all ? document.all["ctl00_cphMain_ddlApplicazioni"] : document.getElementById("ctl00_cphMain_ddlApplicazioni"); var idApp = ddlApp.value; var ddlRuolo = document.all ? document.all["ctl00_cphMain_ddlRuolo"] : document.getElementById("ctl00_cphMain_ddlRuolo"); if (idut == 0) { // devo impostare un ruolo utente per una data applicazione if (idApp == 0) clientside_arguments.IsValid = false; else { clientside_arguments.IsValid = true; } } else clientside_arguments.IsValid = true; } // alla modifica di ddlApplicazioni function CambiaApplicazione(eventTarget, eventArgument) { document.getElementById('ctl00_cphMain_hidAzione').value = 'cambioApplicazione'; __doPostBack(eventTarget, eventArgument); return true; // Page_IsValid ? } </script> <asp:DropDownList ID="ddlApplicazioni" runat="server" OnSelectedIndexChanged="ddlApplicazioni_SelectedIndexChanged"> </asp:DropDownList> <asp:CustomValidator ID="ddlApplicazioni_cv" runat="server" ErrorMessage="selezionare l'applicazione" ControlToValidate="ddlApplicazioni" CssClass="validator_message" Display="Dynamic" ClientValidationFunction="ControllaApplicazione" ValidateEmptyText="True"></asp:CustomValidator> <asp:HiddenField ID="hidAzione" runat="server" /> <asp:DropDownList ID="ddlRuolo" runat="server"> </asp:DropDownList> <asp:LinkButton ID="btnSalva" runat="server" ToolTip="salva le modifiche" CssClass="btnDisabled" OnClientClick="return Salva();" OnClick="btnSalva_Click"> Salva </asp:LinkButton>

Rispondi quotando
)
