Pergunta

Olá eu estou tentando buscar um item da lista e gostaria de saber se esta é uma boa prática.

   SPSite spsite = new SPSite(SPContext.Current.Web.Url);
                    SPWeb spWeb = spsite.RootWeb;
                    SPList spList = spWeb.Lists.TryGetList("MyList");
//here is the code to fetch the values...

Temos 1 conjunto de sites com 50 subsites e mais subsites dentro deles.A minha pergunta é;

Suponha que eu estou em um dos subsites sob subsite número 10, e este código é executado, então será ainda de captação de raiz da web de lista ou dar erro?

Estou confuso, pois o valor da SPContext.Atual.Da Web.Url a URL atual no local respectivo.Então, o código ainda funciona?

Foi útil?

Solução

a sua criação de um novo site que não é descartado, SPContext.Atual.Da Web.Url apenas gera a seqüência de caracteres de url.

maneira correta:

   using (SPSite spsite = new SPSite(SPContext.Current.Web.Url))
   {
        SPWeb spWeb = spsite.RootWeb;

        SPList spList = spWeb.Lists.TryGetList("MyList");
   }

não há necessidade de dispor de spweb como você observou nada há que seja novo.Sua usando o novo spsite um objeto da web.Se você dispor iria levar a erros na uls:

Detectado o uso de SPRequest anteriormente fechado objeto SPWeb.Por favor fechar objetos SPWeb quando você é feito com todos os objetos obtidos a partir de eles, porém, não antes.

outra maneira de usar o código seria:

SPWeb spWeb = SPContext.Current.Site.RootWeb;
SPList spList = spWeb.Lists.TryGetList("MyList");

como você pode ver, não há necessidade de descarte como a sua utilização do site atual rootweb objeto que não deve ser descartado e menos código/ recursos do sistema!

Outras dicas

Como apontado por @Robert, ele vai pegar a web de raiz.No entanto, você não precisa descartar SPWeb objeto obtido a partir da SPSite.RootWeb propriedade.Você também pode obter diretamente a SPSite objeto de SPContext SPSite spsite = SPContext.Current.Site; e, portanto, não precisam ser eliminados em vez de instanciar uma nova, que precisa ser explicitamente eliminados.

Ele vai pegar a RootWeb.

Mas por favor, lembre-se de descartar o spsite quando você é feito, se não estiver usando um "utilizando-declaração":

spsite.Dispose()

Você pode usar SPContext.Current.Site.Url, ao criar o objeto SPSite dentro de seu código,em seguida, usar site.OpenWeb(), o que dará a web de raiz(desde SPSite objeto é criado com a URL do Site).Sempre melhor usar using para descartar objetos.

using (SPSite site=new SPSite(SPContext.Current.Site.Url))
            {
                using(SPWeb web=site.OpenWeb())//always gets you the root web
                {

                }
             }

Ver sobre este blog SPDisposeCheck melhores práticas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top