문제

나는 WebPart에 대한 다양한 것을 저장 한 SharePoint 관리자 목록을 작성했습니다. 관리자만이 목록을 읽을 수 있습니다, 다른 모든 사람들로부터 사용자 권한을 제거했습니다.

다음 웹 파트는 상승 된 권한을 사용하여 목록을 읽습니다.

Guid webID = SPContext.Current.Web.ID;
Guid siteID = SPContext.Current.Site.ID;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteID))
        {
        // List 'AdminList' does not exist at site with URL 'http://devmach/sites/Test/Subsite'.
            using (SPWeb web = site.AllWebs[webID])
            {
                SPList listsp = web.Lists["AdminList"];
                SPListItemCollection collListItems = listsp.Items;
                foreach (SPListItem itemsp in collListItems)
                {
.

그러나 새 하위 사이트를 만들 때 WebPart를 사이트에 추가하면 해당 하위 사이트가 "administ"가 없으므로 작동하지 않습니다.

내 질문은 다음과 같습니다.

WebPart가 다른 페이지에있는 경우 목록을 읽을 수있는 방법은 무엇입니까? 어떤 변화가 필요합니까?

도움이 되었습니까?

해결책

use open web, put in the site name for that web, so if i have:

SPSite/SPWeb

mysitecollection.com/mysubsite

it would be:

site.OpenWeb("mysubsite")

full code:

Guid siteID = SPContext.Current.Site.ID;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteID))
        {
        // List 'AdminList' does not exist at site with URL 'http://devmach/sites/Test/Subsite'.
            using (SPWeb web = site.OpenWeb("mysubsite"))
            {
                SPList listsp = web.Lists["AdminList"];
                SPListItemCollection collListItems = listsp.Items;
                foreach (SPListItem itemsp in collListItems)
                {

the code should only be used to retrive the list, if you want to use the list in many subsites than create it in the sitecollection rather than a subsite!

Guid siteID = SPContext.Current.Site.ID;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteID))
        {
        // List 'AdminList' does not exist at site with URL 'http://devmach/sites/Test/Subsite'.
            using (SPWeb web = site.OpenWeb())
            {
                SPList listsp = web.Lists["AdminList"];
                SPListItemCollection collListItems = listsp.Items;
                foreach (SPListItem itemsp in collListItems)
                {

first method advanced:

If its a requirement that you need the list within a subsite and need to access it within another subsite than this will do the trick:

get the list from the given subsite you have it on:

private SPList getlistFromSite(SPSite site)
{
                SPList listsp = null;
                using (SPWeb web = site.OpenWeb("mysubsite"))
                {
                    SPList listsp = web.Lists["AdminList"];
                }
                return listsp;
}

to use method above but keeping the current site the user is on!:

Guid webID = SPContext.Current.Web.ID;
Guid siteID = SPContext.Current.Site.ID;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite(siteID))
    {
        using (SPWeb web = site.AllWebs[webID])
        {
            SPList listsp = getlistFromSite(site);
            SPListItemCollection collListItems = listsp.Items;
            foreach (SPListItem itemsp in collListItems)
            {
                //loop
            }
        }
    }
});

다른 팁

You have to know the website that contains AdminList.

Here are two ways to go:

  1. Create AdminList in the root web of the site collection and then in your code get the webID of the root web

    Guid webID = SPContext.Current.Site.RootWeb.ID;
    Guid siteID = SPContext.Current.Site.ID;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteID))
        {
            using (SPWeb web = site.OpenWeb(webID))
            {
                SPList listsp = web.Lists["AdminList"];
                SPListItemCollection collListItems = listsp.Items;
                foreach (SPListItem itemsp in collListItems)
                {
    
  2. Add custom property to you webpart so you can set the Url of the list in the webpart's property pane, and use that property in your code to get the list.

    http://msdn.microsoft.com/en-us/library/dd584174(v=office.11).aspx http://zimmergren.net/technical/how-to-custom-web-part-properties-toolpart

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top