Изменение свойств WebPartZone в коде
-
16-10-2019 - |
Вопрос
Вот проблема:с помощью SPD легко изменить свойства, чтобы пользователи не могли закрывать/сворачивать веб-части из зоны wp:
Свойства редактирования webpartzone http://img34.imageshack.us/img34/3389/webpartzoneedit.png
Как мы можем сделать это в коде?У меня на сайте более 30 страниц веб-частей aspx, я хочу иметь возможность сделать это, чтобы никто не мог изменять свойства веб-частей (закрывать, удалять их и т. д.).
Единственное, что я нашел, это ссылку: Spwebpartzonetools.
Дополнительную информацию о SDK можно найти по адресу: wss 3.0 SDK, во втором важном абзаце написано:
Несмотря на то, что вы можете добавить веб -части на дисплей, редактирование и новые формы для элементов списка (dispform.aspx, editform.aspx и newform.aspx), это не рекомендуется или не поддерживается в Sharepoint Services Windows.Поддерживается добавление веб -частей для перечисления страниц просмотра (allitems.aspx).
Так что это моя ошибка, которую я хочу исправить :).Я нарушил это правило.Мою проблему можно решить в SPD, но я не знаю, можно ли это исправить в коде.
Ошибка была «вдохновлена» одним из потрясающих 40 шаблонов: BudgetingTrackingMultipleProjects.wsp.В списке проектов в DispForm.aspx Microsoft добавляет дополнительные веб-части для создания основной формы.
Решение
Я решил свою проблему следующим образом:если вы откроете DispForm.aspx в SPD и измените свойства зоны веб-части, то в исходном коде (aspx) мы увидим эту строку:
<WebPartPages:WebPartZone runat="server" FrameType="None" ID="Main" Title="loc:Main" allowlayoutchange="false" allowpersonalization="false" allowcustomization="false">
Итак, я создал простое консольное приложение, которое посещает каждый список, получает URL-адрес его DispForm.aspx и открывает его как обычный текстовый файл.Поэтому я не использую какой-либо API или что-то еще, просто SPWeb.GetFile(строка) - чтобы получить SPFile и SPWeb.GetFileAsString(url) чтобы получить содержимое aspx в виде строки.Затем я добавляю атрибуты (РазрешитьLayoutchange / разрешить персонализацию / разрешить настройку) в строке, представленной выше, используя только методы поиска и замены строк.
Затем сохраните содержимое обратно в файл aspx с помощью SPFile.SaveBinary().Вот и все, в следующий раз, когда DispForm.aspx запросит вклад.оттуда пользователь ничего не может сделать с веб-частями.Итак, это мой метод изменения свойств зоны веб-части.Я так жду других решений.
Другие советы
У вас должна быть возможность установить эти свойства после подготовки веб-частей (то есть, если вы не сделали, как сказал Крис, и не определили это в манифесте веб-части), перебирая веб-части в SPLimitedWebPartManager (остерегайтесь утечка) на каждой странице и установите свойства AllowClose, AllowHide, AllowMinimize и т. д.
HTH Anders Rask
Вы также можете установить это значение для элемента управления WebPartZone (в коде или в aspx).Используйте свойство LockLayout, например, так:
<WebPartPages:WebPartZone LockLayout="true" runat="server"...>...</...>
/WW
Вам нужно сделать это в коде?Если ваше требование состоит в том, чтобы просто запретить пользователям вносить эти изменения в ваши веб-части, это обычно решается путем предоставления веб-части свойств, которые определяют такое поведение, например:
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="xxxxx.SharePoint.Common.WebParts.SiteDirectoryWebPartWrapper,
xxxxxx.SharePoint.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxx" />
<importErrorMessage>Cannot import this Web Part.</importErrorMessage>
</metaData>
<data>
<properties>
<property name="AllowZoneChange" type="bool">False</property>
<property name="AllowHide" type="bool">False</property>
<property name="AllowMinimize" type="bool">False</property>
<property name="AllowClose" type="bool">False</property>
<property name="AllowEdit" type="bool">True</property>
<property name="AllowConnect" type="bool">False</property>
<property name="ExportMode" type="exportmode">All</property>
<property name="Hidden" type="bool">False</property>
<property name="TitleUrl" type="string" />
<property name="Description" type="string">Displays a list of sites
for the current area (e.g. 'teams') in a treeview. </property>
<property name="Title" type="string">xxxxx Site Directory
Web Part</property>
</properties>
</data>
</webPart>
</webParts>