gpt4 book ai didi

c# - 以编程方式创建新站点并选择父站点? (分享点)

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:19 25 4
gpt4 key购买 nike

我正在使用以下代码创建一个新站点:

newWeb = SPContext.GetContext(HttpContext.Current).Web.Webs.Add(newSiteUrl, newSiteName, null, (uint)1033, siteTemplate, true, false);

try
{
newWeb.Update();
}

NewSiteUrl 和 newSiteName 是来自两个文本框的值,无论我在哪个网站上使用此代码(在 Web 部件中),新网站都将成为该网站的子网站。

我现在希望能够选择父网站,以便新网站可以位于网站集中的任何位置,而不仅仅是作为我使用 Web 部件的网站的子网站。

我创建了以下函数来获取网站集中的所有网站,并使用每个网站的名称和 url 填充下拉列表

private void getSites()
{
SPSite oSiteCollection = SPContext.Current.Site;
SPWebCollection collWebsite = oSiteCollection.AllWebs;

for (int i = 0; i < collWebsite.Count; i++)
{
ddlParentSite.Items.Add(new ListItem(collWebsite[i].Title, collWebsite[i].Url));
}
oSiteCollection.Dispose();
}

如果用户在下拉列表中选择了一个站点,是否可以在 newSiteUrl 中使用该 URL 来决定新站点的位置?我没有让它真正工作,新网站仍然成为当前网站的子网站。我想这与 HttpContext.Current 有关吗?关于我应该如何做的任何想法?

这是我第一次编写自定义 Web 部件,Sharepoint 对象模型目前有点不知所措。

提前致谢。

编辑:更新代码给出错误:尝试使用已关闭或处置且不再有效的 SPWeb 对象。

if (!siteExists(newSiteName) && newSiteName.Length > 0)
{
using (var parent = SPContext.GetContext(HttpContext.Current).Site)
{
using(var parentWeb = parent.OpenWeb(new Guid(parentSite)))
{
newWeb = parentWeb.Webs.Add(newSiteUrl, newSiteName, null, (uint)1033, siteTemplate, true, false);

try
{
newWeb.Update();
}

catch
{
lblErrorCreateSite.Text = "An error occured when trying to create a new site, please try again.";
}
finally
{

txtSiteName.Text = "";

// Show link to new site
lblNewSite.Text = "A new site was successfully created at ";
hplNewSite.Visible = true;
hplNewSite.NavigateUrl = siteURL() + newSiteName;
hplNewSite.Text = newSiteName;

// Dispose to reload the SharePoint content database
newWeb.Dispose();

}

// Set permissions
try
{
string site = siteURL();
SPSite spSite = new SPSite(site + newSiteName);
SPWeb web = spSite.OpenWeb();

// Assign Full Access role to the selected groups
string fullAccessGroup = null;
string fullAccessRole = null;
foreach (ListItem item in lbFullAccess.Items)
{
fullAccessGroup = item.Value;
fullAccessRole = "Full Control";
SPRoleAssignment roleAssignment = new SPRoleAssignment(web.SiteGroups[fullAccessGroup]);
SPRoleDefinitionBindingCollection roleDefinition = roleAssignment.RoleDefinitionBindings;

roleDefinition.Add(web.RoleDefinitions[fullAccessRole]);
web.RoleAssignments.Add(roleAssignment);
web.Properties[fullAccessGroup] = fullAccessRole;
web.Properties.Update();
}

// Assign Contributor role to the selected groups
string contributeGroup = null;
string contributeRole = null;
foreach (ListItem item in lbContributor.Items)
{
contributeGroup = item.Value.ToString();
contributeRole = "Contribute";

SPRoleAssignment roleAssignment = new SPRoleAssignment(web.SiteGroups[contributeGroup]);
SPRoleDefinitionBindingCollection roleDefinition = roleAssignment.RoleDefinitionBindings;

roleDefinition.Add(web.RoleDefinitions[contributeRole]);
web.RoleAssignments.Add(roleAssignment);
web.Properties[contributeGroup] = contributeRole;
web.Properties.Update();
}

// Assign Reader role to the selected groups
string readerGroup = null;
string readerRole = null;
foreach (ListItem item in lbReadOnly.Items)
{
readerGroup = item.Value.ToString();
readerRole = "Read";

SPRoleAssignment roleAssignment = new SPRoleAssignment(web.SiteGroups[readerGroup]);
SPRoleDefinitionBindingCollection roleDefinition = roleAssignment.RoleDefinitionBindings;

roleDefinition.Add(web.RoleDefinitions[readerRole]);
web.RoleAssignments.Add(roleAssignment);
web.Properties[readerGroup] = readerRole;
web.Properties.Update();
}

}
catch
{
lblErrorSetPermissions.Text = "Error trying to set permissions for this site, please try again.";
}
finally
{

}

}
}
}
else
{
if (siteExists(newSiteName))
{
lblErrorCreateSite.Text = "A site with that name already exists. Please select another name.<br/>";
}

if (newSiteName.Length == 0)
{
lblErrorCreateSite.Text = "A Site Name is required.<br/>";
}

hplNewSite.Visible = false;
}

编辑2:所以我用

SPSite currentContext = SPContext.GetContext(HttpContext.Current).Site;
SPWeb parentID = currentContext.OpenWeb(new Guid(parentSiteValue));

newWeb = parentID.Webs.Add(newSiteUrl, newSiteName, null, (uint)1033, siteTemplate, true, false);

但是我怎样才能最简单地获取新创建站点的 url(在我创建的链接中显示正确的 url 并在我设置权限时使用)?

最佳答案

您应该打开在下拉列表中选择的 SPWeb。使用网络 ID 作为下拉值,获取上下文 spsite,然后使用 SPSite.OpenWeb(GUID) 打开您想要作为父级的网络。将新网站添加到该网站的网站:

private void getSites()
{
SPSite oSiteCollection = SPContext.Current.Site;
SPWebCollection collWebsite = oSiteCollection.AllWebs;
for (int i = 0; i < collWebsite.Count; i++)
{
ddlParentSite.Items.Add(new ListItem(collWebsite[i].Title, collWebsite[i].Id));
}

// oSiteCollection.Dispose(); // NEVER DISPOSE THE SPContext.Current.Site or Web
}

using( var site = SPContext.GetContext(HttpContext.Current).Site)
{
using(var parentWeb = site.OpenWeb(new Guid(DDLVALUE))
{
newWeb = parentWeb.Webs.Add(newSiteUrl, newSiteName, null, (uint)1033, siteTemplate, true, false);
try
{
newWeb.Update();
}
}
}

关于c# - 以编程方式创建新站点并选择父站点? (分享点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com