Список элемента не обновляется после редактирования

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/7132

  •  16-10-2019
  •  | 
  •  

Вопрос

Таким образом, у меня есть пользовательская веб -часть как для Dispform.aspx, так и для editform.aspx, которая на странице загружает список всех полей в списке SharePoint и петле через каждое поле и устанавливает его свойство отображения, чтобы быть истинным для обоих дисплеев. .aspx и editform.aspx страницы. Проблема в том, когда я пытаюсь отредактировать элемент списка и сохранить изменения, которые я получаю ошибку. Образец ошибки и кода показан ниже:

Ошибка:

Spexception: Настройки для этого списка были недавно изменены. Обновите свой браузер, прежде чем редактировать этот список.

Код:

 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();
       }
     }
   }
 }
Это было полезно?

Решение 2

Итак, от отладки решения кажется, что, хотя FormMode находится в режиме редактирования, вы не можете вызвать метод обновления для списка. Код работает нормально в режиме отображения на странице issform.aspx, и он будет скрывать и показывать правильные поля на странице editform.aspx, но когда вы нажимаете сохранение, когда ошибка брошена. Если метод обновления будет удален, ошибка не будет выброшена, однако вы не сможете увидеть изменения в полях. Я действительно обнаружил это, попробовав другой маршрут, который фактически скрывает элемент управления рендерингом на странице вместо фактического элемента поля SP. Вы можете выполнить шаги по этой ссылке, чтобы увидеть, как манипулировать фактическими элементами управления, которые отображаются в форме:ссылка текст

Другие советы

Я думаю, что проблема в том, что вы звоните.

Вы можете лучше иметь флаг "islistupdated"

т.е.

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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top