Perché il mio elenco a discesa si cancella dopo il postback quando si trova nell'ambiente live ma non nei test?

StackOverflow https://stackoverflow.com/questions/1221676

  •  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();
   }
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top