Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338

    [c#] DropDownList ed evento SelectedIndexChanged non catturato

    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
    codice:
    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);
            }
    .aspx
    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>

  2. #2
    Nella DropDownList prova a mettere AutoPostBack="true" prima di tutto, poi vediamo che succede (non ho letto il codice per bene ma ho notato che manca e se manca l'evento OnSelectedIndexChange non viene catturato )

    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    Dimenticavo di dirvi che i controlli sono in un UpdatePanel, e ovviamente il ViewState è abilitato

    l'AutoPostBack l'avevo a True fino alla release precedente, anche in conseguenza dell'UpdatePanel, poi l'ho disabilitato poichè secondo alcune fonti potrebbe andare in conflitto con la funzione CambiaApplicazione che richiamo sull'onchange, funzione che mi serve per memorizzare l'azione che sto facendo.. così ho spostato il postback in questa funzione..

    l'evento in realtà viene catturato in alcune situazioni e non in altre come ho spiegato, non funziona quando prima schiaccio su btnSalva e il controllo custom segnala un problema di ddl non selezionata

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    Ho scoperto che il problema si verifica alla prima selezione della ddl.. riassumendo:

    - al caricamento iniziale della pagina la selezione della ddl fa scattare il postback e di conseguenza c'è un evento selectedindexchanged catturato lato server (in realtà via ajax) = ok
    - se premo Salva con la ddl non selezionata il custom validator mi visualizza l'errore
    - successivamente seleziono la ddl e qui non c'è il postback, perciò l'evento non viene catturato ! il messaggio di errore adesso sparisce
    - se però riseleziono la ddl su un'altra opzione il postback parte e l'evento catturato..

    idee?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.