Выпадающий список в sharepoint с заполненными именами сайтов - PullRequest
0 голосов
/ 08 февраля 2010

Как я могу заполнить выпадающий список с именем сайта в семействе сайтов?

1 Ответ

4 голосов
/ 08 февраля 2010

Программно вы имеете в виду?

SPSite.AllWebs

Использовать SPSite.AllWebs свойство, которое

Получает коллекцию всех веб-сайтов. которые содержатся на сайте коллекция, в том числе на высшем уровне сайт и его подсайты.

Однако для ваших пользователей вы, вероятно, просто получите UnauthorizedAccessException (если вы не выберете заполнение DropDownList с повышенными привилегиями, но это зависит от того, что вы не хотите делать с этим раскрывающимся списком), потому что не у всех есть права перечислять все сети.

SPWeb.GetSubwebsForCurrentUser

В этом случае вы используете метод SPWeb.GetSubwebsForCurrentUser, который

Возвращает коллекцию дочерних сайтов. под текущим веб-сайтом которого текущий пользователь является участником.

Однако этот метод возвращает только дочерние сайты ниже (то есть на 1 уровень) текущей сети. Вам нужно будет выполнить рекурсивный цикл и вызвать GetSubWebsForCurrentUser для каждого найденного SPWeb .. err

Я бы порекомендовал ...

Вы можете использовать SPSecurity.RunWithElevatedPrivileges для вызова SPSite.AllWebs, затем на каждом полученном SPWeb проверьте, нужны ли пользователю разрешения, если да, добавьте элемент в DropDownList.

В коде это выглядит примерно так:

    DropDownList ddl = new DropDownList();
    SPUser currentUser = SPContext.Current.Web.CurrentUser;

    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite elevatedSite = new SPSite(SPContext.Current.Site.ID)) //you MUST create new SPSite instance
        {
            SPWebCollection elevatedWebs = elevatedSite.AllWebs;
            foreach (SPWeb elevatedWeb in elevatedWebs)
            {
                try
                {
                    if (elevatedWeb.DoesUserHavePermissions(currentUser.LoginName, SPBasePermissions.ViewPages))
                        ddl.Items.Add(new ListItem(elevatedWeb.Title, elevatedWeb.ID.ToString()));
                }
                finally
                {
                    if (elevatedWeb != null)
                        elevatedWeb.Dispose();
                }
            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...