Si è verificato un errore nel punto di distribuzione 'Attivare le funzioni': riferimento oggetto non impostato su un'istanza di un oggetto: Errore ricevitore funzionalità
-
29-09-2020 - |
Domanda
Ho cretanato una web part visiva in SP 2013. Ha bisogno di un elenco di SharePoint.Così ha scritto il seguente codice nel ricevitore della funzione Web Part. Quando riesco a distribuire la soluzione, ottengo errori dice che si è verificato un errore nella fase di distribuzione 'Attiva funzioni': il riferimento all'oggetto non è impostato su un'istanza di un oggetto.Ho impostato ACTIVATEONDEDEADEDEDAULT="FALSE" e SEMPREFORCEINSTALL="TRUE". Dai un'occhiata al mio file Manifest file.
<Feature xmlns="http://schemas.microsoft.com/sharepoint/" Title="SharePointProject1 Feature1" ActivateOnDefault="FALSE" AlwaysForceInstall="TRUE" Id="8f7163d5-6c65-40d8-9045-8f74192f07d7" ReceiverAssembly="SharePointProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9c2f0c3a8e22f6a0" ReceiverClass="SharePointProject1.Features.Feature1.Feature1EventReceiver" Scope="Site">
<ElementManifests>
<ElementManifest Location="VisualWebPart1\Elements.xml" />
<ElementFile Location="VisualWebPart1\VisualWebPart1.webpart" />
</ElementManifests>
</Feature>
.
Questo è il mio codice funzione1eventreceiver.
SPWeb spWeb = properties.Feature.Parent as SPWeb;
SPList laptopList = spWeb.Lists["Laptops"];
if (laptopList != null)
{
laptopList.Delete();
}
SPListCollection lists = spWeb.Lists;
lists.Add("Laptops", "The Laptops", SPListTemplateType.GenericList);
laptopList = spWeb.Lists["Laptops"];
laptopList.Fields.Add("Name", SPFieldType.Text, true);
laptopList.Fields.Add("Model", SPFieldType.Text, true);
laptopList.Fields.Add("Image", SPFieldType.URL, false);
.
Posso distribuire se ho solo sotto il codice
SPWeb spWeb = properties.Feature.Parent as SPWeb;
. Soluzione
La web part visiva deve essere inclusa nella funzione SITE-SCOPED, come risultato. Proprietà. Feature.Parent.Parent è un oggetto SPSite.È necessario verificare l'ambito della funzione e utilizzare il codice seguente se lo scopo è il sito.
SPSite site = properties.Feature.Parent as SPSite;
if (site != null){
SPWeb web = site.RootWeb;
SPList laptopList = web.Lists["Laptops"];
...
}
. Altri suggerimenti
Web.Lists [] causerà un'eccezione se l'elenco non è lì.
Utilizzare trygetlist invece