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
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
<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:UpdatePanel ID="updElencoApp" runat="server">
<ContentTemplate>
<aspropDownList ID="ddlApplicazioni" runat="server" onSelectedIndexChanged="ddlApplicazioni_SelectedIndexChanged">
</aspropDownList>
<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" />
<aspropDownList ID="ddlRuolo" runat="server">
</aspropDownList>
<asp:LinkButton ID="btnSalva" runat="server" ToolTip="salva le modifiche" CssClass="btnDisabled"
onClientClick="return Salva();" onClick="btnSalva_Click"> Salva </asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
Modificato da Another il 29 settembre 2010 09.40 -