Frage

Daher habe ich ein benutzerdefiniertes Web -Teil sowohl auf der Dispform.aspx als auch in editForm.aspx, die auf der Seite Ladelast eine Liste aller Felder in einer SharePoint -Liste und Schleifen durch jedes Feld erhält und die Anzeigeeigenschaft so festlegt .aspx und editform.aspx Seiten. Das Problem ist, wenn ich versuche, ein Listenelement zu bearbeiten und die Änderungen zu speichern. Ich erhalte einen Fehler. Der Fehler- und Code -Beispiel wird unten angezeigt:

Fehler:

Spexception: Die Einstellungen für diese Liste wurden kürzlich geändert. Aktualisieren Sie Ihren Browser, bevor Sie diese Liste bearbeiten.

Code:

 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();
       }
     }
   }
 }
War es hilfreich?

Lösung 2

OK. Wenn Sie also die Lösung debuggen, können Sie die Aktualisierungsmethode für die Liste nicht aufrufen. Der Code funktioniert im Anzeigemodus auf der Seite von Dispform.aspx gut und wird ausblenden und die richtigen Felder in der Seite editform.aspx angezeigt. Wenn Sie jedoch auf Speichern klicken, wird der Fehler geworfen. Wenn die Aktualisierungsmethode entfernt wird, wird der Fehler nicht geworfen, aber Sie können die Änderungen an den Feldern nicht erkennen. Ich habe dies tatsächlich herausgefunden, indem ich eine andere Route ausprobiert habe, die tatsächlich die Rendering -Steuerung auf der Seite anstelle des tatsächlichen SP -Feldelements versteckt. Sie können die Schritte in diesem Link befolgen, um zu sehen, wie die tatsächlichen Steuerelemente manipuliert werden können, die auf dem Formular gerendert werden:Link Text

Andere Tipps

Ich denke, das Problem ist, dass Sie die Liste anrufen.

Sie könnten besser eine "islistupdated" -Flag haben

dh.

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top