如何在网站集中使用网站名称填充下拉列表?
答案 0 :(得分:4)
以编程方式表示你的意思?
使用SPSite.AllWebs属性
获取所有网站的集合 包含在网站内 集合,包括顶级 网站及其子网站。
但是,对于您的用户,您可能只会获得UnauthorizedAccessException(如果您不选择使用提升的权限填充DropDownList,但这取决于您对该下拉列表不做什么) ,因为不是每个人都有权枚举所有网站。
在这种情况下,您使用
的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();
}
}
}
});