Domanda

quindi ho una parte web personalizzato sia sul DispForm.aspx e EditForm.aspx che, al caricamento della pagina ottiene un elenco di tutti i campi in un elenco di SharePoint e loop attraverso ogni campo e imposta la sua proprietà di visualizzazione per essere vero per entrambe le pagine DispForm.aspx e EditForm.aspx. Il problema è quando si tenta di modificare una voce di elenco e salvare le modifiche ottengo un errore. Il campione di errore e il codice è mostrato di seguito:

Errore:

SPException: Le impostazioni di questo elenco sono stati recentemente cambiato. Aggiornare il browser prima di modificare questa lista.

Codice:

 protected void Page_Load(object sender, EventArgs e)
 {
   using (SPSite site = new SPSite("http://labsp001"))
   {
     if (site != null)
     {
       using (SPWeb web = site.OpenWeb())
       {
         var mainList = web.Lists["Main List"];
         web.AllowUnsafeUpdates = true;
         web.Update();

         var spFieldCol = mainList.Fields.Cast<SPField>().ToList();
         if (spFieldCol != null)
         {
           foreach (SPField fieldItem in spFieldCol)
           {
             if (field != null)
             {
               field.ShowInDisplayForm = true;
               field.ShowInEditForm = true;
               field.Update();
               field.ParentList.Update();
             }
           }
         }
         web.AllowUnsafeUpdates = false;
         web.Update();
       }
     }
   }
 }
È stato utile?

Soluzione 2

L'approvazione in modo da eseguire il debug della soluzione sembra che mentre la FormMode è in modalità Edit non è possibile chiamare il metodo Update per la lista. Il codice funziona bene in modalità di visualizzazione della pagina DispForm.aspx e sarà nascondere e mostrare i campi corretti nella pagina EditForm.aspx ma quando si fa clic su Salva cioè quando è gettato l'errore. Se il metodo Update viene rimosso non venga proiettato l'errore tuttavia non sarà in grado di vedere le modifiche ai campi. In realtà ho trovato questo fuori cercando un'altra strada che è in realtà nasconde il controllo di rendering sulla pagina anziché dell'articolo reale SP campo. È possibile seguire la procedura su questo link per vedere come manipolare i controlli effettivi che sono visualizzati sul modulo: testo del link

Altri suggerimenti

Credo che il problema è che si sta chiamando List.Update più volte.

Si potrebbe essere meglio avere una bandiera "IsListUpdated"

es.

bool IsListUpdated = false;

foreach (SPField fieldItem in spFieldCol)
           {
             if (field != null)
             {
               field.ShowInDisplayForm = true;
               field.ShowInEditForm = true;
               field.Update();
               isListUpdated=true;
             }
           }
if (IsListUpdated)
    mainList.Update();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top