填充了站点名称的sharepoint中的下拉列表

时间:2010-02-08 14:46:09

标签: sharepoint sharepoint-2007

如何在网站集中使用网站名称填充下拉列表?

1 个答案:

答案 0 :(得分:4)

以编程方式表示你的意思?

SPSite.AllWebs

使用SPSite.AllWebs属性

  

获取所有网站的集合   包含在网站内   集合,包括顶级   网站及其子网站。

但是,对于您的用户,您可能只会获得UnauthorizedAccessException(如果您不选择使用提升的权限填充DropDownList,但这取决于您对该下拉列表不做什么) ,因为不是每个人都有权枚举所有网站。

SPWeb.GetSubwebsForCurrentUser

在这种情况下,您使用

的SPWeb.GetSubwebsForCurrentUser方法
  

返回子网站的集合   在当前网站下面   当前用户是会员。

然而,此方法仅返回子网情况(深度为1级,即当前网络)。您将需要递归循环并在您找到的每个SPWeb上调用GetSubWebsForCurrentUser ..错误

我建议......

您可以使用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();
                }
            }
        }
    });