Perché il mio elenco a discesa si cancella dopo il postback quando si trova nell'ambiente live ma non nei test?
-
10-07-2019 - |
Domanda
Ho un elenco a discesa su un modulo Web ASP.NET. È impostato su autopostback e viewstate è abilitato. Quando eseguo il mio progetto da Visual Studio, posso modificare il valore, prelevare il nuovo valore nel postback e visualizzare alcuni risultati correlati in una griglia (Infragistics). Posso continuare a modificare correttamente il valore e gli aggiornamenti della griglia.
Quando lo copio dalla mia casella test / dev sul server Windows 2008 live, tutte le modifiche. La prima modifica all'elenco a discesa provoca un postback, ma la griglia non viene aggiornata perché l'evento SelectedIndexChanged dell'elenco a discesa non viene generato. La seconda modifica cancella del tutto il menu a discesa.
Gli elementi nel menu a discesa vengono creati quando la pagina viene caricata per la prima volta come semplici ListItems che vengono aggiunti alla raccolta Articoli del controllo. I valori vengono recuperati da un sistema Microsoft CRM ma non associati ai dati.
Qualcuno può spiegare cosa non va e perché il comportamento in Visual Studio sarebbe diverso da quello quando si vive?
protected void Page_Load(object sender, EventArgs e)
{
_crm = GetCrmConnection();
if (!IsPostBack)
{
ShowDepotList();
ShowJobsForCurrentDepot(); // Updates the grid - not shown in SO
}
}
private void ShowDepotList()
{
List<BusinessEntity> depots = _crm.GetDepots();
foreach (DynamicEntity depot in depots)
{
string depotName = depot.Properties["dpt_name"].ToString();
string locationName = depot.Properties["dpt_locationname"].ToString();
ListItem depotListItem = new ListItem
{
Text = string.Format("{0} - {1}", depotName, locationName),
Value = ((Key)depot.Properties["dpt_sitedetailid"]).Value.ToString()
};
DepotInput.Items.Add(depotListItem);
}
}
protected void DepotInput_SelectedIndexChanged(object sender, EventArgs e)
{
ShowJobsForCurrentDepot();
}
Soluzione
Se sei sicuro che il codice sulla macchina di prova e sulla macchina live sia lo stesso, sei sicuro che anche web.config sia lo stesso?
È possibile attivare e disattivare ViewState in web.config:
<pages enableViewState="false" />
Potresti averlo acceso durante lo sviluppo, ma spento sul web.config live.