2013-01-10 18 views
12

Ho una parte Web visiva (creata con il modello Visual Stuido 2012 standart dal modulo "Aggiungi nuovo elemento") con un solo elemento <div id="newsListDiv" runat="server"></div>. Voglio aggiungere a livello di codice il mio controllo utente ad esso utilizzando il seguente codice:Aggiungere il controllo utente alla web part in Sharepoint 2013

protected void Page_Load(object sender, EventArgs e) 
{  
    NewsLine newsLine = Page.LoadControl(@"~/_ControlTemplates/MainTheme/NewsLine.ascx") as NewsLine; 
    newsListDiv.Controls.Add(newsLine); 
} 

Ma quando schiero la soluzione e aggiungere la web part alla pagina si vede una pagina di errore, che mi dice che il file '/ _ControlTemplates/MainTheme/NewsLine.ascx 'non esiste. Ma se guardo nella cartella "C: \ Programmi \ File comuni \ microsoft condivisi \ Estensioni del server Web \ 15 \ TEMPLATE \ CONTROLTEMPLATES \ MainTheme" posso vedere che il file è presente lì. Ho provato a impostare il livello di attendibilità su "Completo" ma ho ottenuto lo stesso errore. Ho anche provato ad aggiungere il controllo utente nel file di ascx come questo:

<%@ Register Src="~/_controltemplates/MainTheme/NewsLine.ascx" TagPrefix="uc1" TagName="NewsLine" %> 

<div id="newsListDiv" runat="server"> 
    <uc1:NewsLine runat="server" id="NewsLine" /> 
</div> 

E in questo modo un ottenere un errore di compilazione: "Il nome 'InitializeControl' non esiste nel contesto attuale". Ho anche notato che non appena aggiungo la riga Register o Reference (con il percorso al mio controllo utente) al mio file .ascx, il file .g.cs diventa vuoto! E si riempie di nuovo quando rimuovo quella linea. Ho provato molti scritti di percorso diversi come "../_controltemplates/", "/ controltemplates/15 /", ecc. Ma nessuno di loro ha fatto alcuna differenza. Mi sto disperando qui, per favore aiuto!

risposta

19

Hai dimenticato di provare un'altra opzione. È lo stesso quando si accede alla cartella _layouts. Dovresti specificare il 15 hive.

Il percorso corretto è "~/_ControlTemplates/

NewsLine newsLine = Page.LoadControl(@"~/_ControlTemplates/15/MainTheme/NewsLine.ascx") 
+0

Provato anche quello, ancora senza fortuna. Mi sembra che ci sia qualche problema con lo strumento che genera automaticamente file .g.cs. Ho provato a reinstallare VS, ma non è stato d'aiuto neanche. Ho deciso di non utilizzare UserControls per ora, ma ho avuto l'idea che potrebbe non funzionare perché ho creato la cartella ControlTemplates nel VS non come cartella mappata. Verificherò più tardi ... – 4tuneTeller

+1

Lo stesso problema qui, ma la soluzione ha funzionato! Thnx a tonnellata. – ChiYoung

+0

Ha funzionato anche per me .. Grazie mille :)! – Muhammedh

0

Correva lo stesso problema. Non avevo visto il suggerimento per aggiungere il 15 per il percorso e questo ha funzionato per me. Il solo l'altra differenza tra il mio riferimento e il tuo è che non ho il ~ all'inizio Il/è il primo carattere

0

Ho questo stesso problema funziona solo quando lo faccio nel codice dietro ma non ho fortuna tring per aggiungerlo ad ascx come qualsiasi altro controllo che uso! - Dio Perché dovrebbe essere tutto così diverso in sharepoin t? !!!!