2013-01-10 6 views
12

Ich habe ein visuelles Webpart (erstellt mit Standard Visual Studio 2012 Vorlage von "Add new item" Formular) mit nur einem einzigen <div id="newsListDiv" runat="server"></div> Element. Ich möchte programmatisch mein eigenes Benutzersteuer es fügen Sie den folgenden Code:Hinzufügen Benutzer Steuerelement zu Webpart 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); 
} 

Aber wenn ich die Lösung implementieren und den Webpart der Seite zeigt es eine Fehlerseite hinzufügen, mir zu sagen, dass die Datei ‚/ _ControlTemplates/MainTheme/NewsLine.ascx 'existiert nicht. Aber wenn ich in den Ordner "C: \ Programme \ Gemeinsame Dateien \ microsoft shared \ Webservererweiterungen \ 15 \ TEMPLATE \ CONTROLTEMPLATES \ MainTheme" schaue, kann ich sehen, dass die Datei dort vorhanden ist. Ich habe versucht, die Vertrauensstufe auf "Full" zu setzen, habe aber den gleichen Fehler. Ich habe auch versucht, wie diese dem Benutzer die Kontrolle in ASCX-Datei hinzufügen:

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

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

Und dass ein Weg, um einen Übersetzungsfehler erhalten: „Der Name‚InitializeControl‘existiert nicht im aktuellen Kontext“. Ich habe auch bemerkt, dass die .g.cs-Datei leer wird, sobald ich die Register- oder Referenzzeile (mit dem Pfad zu meinem Benutzersteuerelement) zu meiner .ascx-Datei hinzufüge. Und es füllt sich wieder, wenn ich diese Zeile entferne. Ich habe viele verschiedene Pfadbeschreibungen wie "../_controltemplates/", "/ controlltemplates/15 /" usw. ausprobiert. Aber keiner von ihnen hat einen Unterschied gemacht. Ich bin verzweifelt hier, bitte hilf!

Antwort

19

Sie haben vergessen, eine weitere Option auszuprobieren. Dies gilt auch für den Zugriff auf den _layouts-Ordner. Sie sollten die 15 Bienenstock angeben.

Der richtige Weg ist „~/_ControlTemplates/

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

Versucht, dass man auch immer noch kein Glück. Es scheint mir, dass es ein Problem mit dem Tool gibt, das automatisch die .g.cs Datei erzeugt. Versucht, VS neu zu installieren, aber das hat auch nicht geholfen. Ich entschied mich, UserControls für jetzt nicht zu verwenden, aber ich habe eine Idee, dass es möglicherweise nicht funktioniert, weil ich ControlTemplates-Ordner in dem VS nicht als einen zugeordneten Ordner erstellte. Ich werde später nachsehen ... – 4tuneTeller

+1

Das gleiche Problem hier, aber die Lösung hat funktioniert! Thnx eine Tonne. – ChiYoung

+0

Es funktionierte auch für mich .. Vielen Dank :)! – Muhammedh

0

wurde in das gleiche Problem laufen. Ich hatte nicht den Vorschlag gesehen, die 15 auf den Pfad für das Hinzufügen und das funktionierte für mich. Die nur anderer unterschied zwischen meiner referenz und deiner ist ich habe nicht das ~ am anfang. Das/ist das erste zeichen.

0

Ich habe dieses selbe Problem nur funktioniert es, wenn ich es in Code hinter, aber ich bekomme kein Glück tring, um es wie alle anderen Steuerelemente, die ich benutze, zu Ascx hinzuzufügen! - Gott Warum sollte das alles so anders sein? t? !!!!

Verwandte Themen