Domanda

ciao sto cercando di prendere un elemento di elenco e voglio sapere se questa è una buona pratica.

   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...
.

Abbiamo 1 collezione di siti con 50 secondi e successivi in essi.La mia domanda è;

Supponiamo di essere su una delle sottosezioni in base al numero 10 del sottostato 10 e questo codice viene eseguito, quindi raccoglierà ancora l'elenco web root o fornire un errore?

Sono confuso perché il valore di spontext.current.web.url sarà l'URL corrente al rispettivo posizione.Quindi, il codice funzionava ancora?

È stato utile?

Soluzione

La creazione di un nuovo sito che non è disposto, spontext.current.web.url genera solo l'URL della stringa.

Modo corretto:

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

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

Non c'è bisogno di smaltire lo SPWEB come hai notato che non ci sono nuovi.Sta usando il nuovo oggetto Web SPSite.Se lo smalti, porterebbe agli errori su ULS:

.

L'uso rilevato della sprequest per l'oggetto SPWEB chiuso in precedenza.Per favore Chiudere gli oggetti SPWEB quando hai finito con tutti gli oggetti ottenuti da loro, ma non prima.

Un altro modo per utilizzare il codice sarebbe:

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

Come puoi vedere non è necessario disporre come utilizzando l'oggetto del rootweb del sito corrente che non dovrebbe essere smaltito e meno risorse di codice / sistemi!

Altri suggerimenti

Come sottolineato da @Robert, raccoglierà il web root.Tuttavia, non è necessario disporre dell'oggetto SPWeb recuperato dalla proprietà SPSite.RootWeb.È inoltre possibile ottenere direttamente l'oggetto SPSite da SpContext SPSite spsite = SPContext.Current.Site; e quindi non è necessario disporre invece di installando uno nuovo che deve essere esplicitamente disposto.

Raccumulerà il rootweb.

Ma ricordati di disporre dello spSite quando hai finito, se non si utilizza una "Dichiarazione utilizzando":

spsite.Dispose()
.

È possibile utilizzare SPContext.Current.Site.Url, mentre crei l'oggetto SPSite all'interno del codice, quindi utilizzare site.OpenWeb(), che fornirà il root Web (poiché l'oggetto SPSite viene creato con URL del sito). Sempre meglio usare using per smaltire oggetti.

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

                }
             }
.

Vedi questo blog su Best Practice .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top