SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Fehler bei der Einbindung von UserControl

Unbeantwortet Dieser Beitrag hat 10 Antworten

Ohne Rang
11 Beiträge
Christoph erstellt 5 Okt. 2010 10:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich bastle an einer Lösung auf dem SharePoint Foundation 2010 und komme an einer Stelle einfach nicht weiter, vielleicht hat jemand von Euch eine Idee, wäre ich sehr dankbar.

Nun zum Problem:

Ich habe ein User Control TreeStart.ascx geschrieben, welches zwei weitere Controls lädt (TreePath.ascx und TreeControl.ascx) siehe hier:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$"%>
<%
@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%
@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%
@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"%>
<%@ Import Namespace="Microsoft.SharePoint"%>
<%
@ Register Src="~/_controltemplates/CS/TreePath.ascx" TagName="TreePath" TagPrefix="cs"%>
<%
@ Register Src="~/_controltemplates/CS/TreeControl.ascx" TagName="TreeControl" TagPrefix="cs"%>
<%
@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%
@ Control Language="C#" AutoEventWireup="true" CodeBehind="TreeStart.ascx.cs" Inherits="CCS.Controls.TreeStart" %>

<

 

 

asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate>
<asp:HiddenField ID="hiddenNodeID" runat="server" />
<cs:TreePath id="tpNavigation" runat="server" ></cs:TreePath>
<cs:TreeControl id="treeMain" runat="server" ></cs:TreeControl>
<asp:CustomValidator ID="validGlobal" runat="server" Display="Dynamic"></asp:CustomValidator
..

 

 

 

Das TreePath wird korrekt erkannt, TreeControl wird im VS2010 unterstrichen wie oben und liefert eine Warnmeldung "Das TreeControl-Element ist kein bekanntes Element. Ursache hierfür kann ein Kompilierungsfehler in der Webseite oder das Fehlen der Datei "web.config" sein."

Das Debbugen funktioniert jedoch, aber es kommt zu einem weiteren Fehler wenn ich versuche, das Control zu verwenden, hier ein Ausschnitt:

 

..
using CS.Controls;
namespace CS.CustomFieldTypes {
  public class TreePosition : BaseChoiceField {
   
protected TreeControl treeMain;
    ..

 

 

 

 

 

   protected override void CreateChildControls() {
     
if (Field == null) return;
        base.CreateChildControls();
       
if (ControlMode == Microsoft.SharePoint.WebControls.SPControlMode.Display)
         
return;
        treeMain = (
TreeControl)TemplateContainer.FindControl("treeMain");
        if (treeMain == null)
          throw new ArgumentException("tcMain is null. Corrupted MCCTreePositionFieldControl.ascx file.");
        if (!Page.IsPostBack) {
          treeMain.Checkable =
true;
          treeMain.RootNode =
"Root";
          treeMain.StartNodeID = sStartNodeID;
        }
    }
}

 

 

 

 

 

Der oben unterstrichene Ausdruck liefert immer "null". Ich vermutte, dass es mit der Warnung weiter oben zu tun hat, kann mich da aber auch irren. Für Tipps bin ich dankbar.

Schöne Grüße

Christoph

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Okt. 2010 10:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Meldung von VS ist doch ziemlich aussagekräftig. Die Ursache muß irgendwo in TreeControl liegen.

Läßt sich das fehlerfrei kompilieren? Erbt es von UserControl? Ist die CodeBehind-Klasse und ihr Standardkonstruktor public?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
11 Beiträge
Christoph Als Antwort am 5 Okt. 2010 10:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Kompilierung funktioniert, nur der Zugriff auf das Control nicht. Das TreeControl erbt von UserControl und die Klasse ist public, hier ein Ausschnitt:

 

 

 

 

..
using 

 

 

CS.Global;

namespace

 

 

CS.Controls {
 
public delegate void OnNodeSelectedHandler(TreeNode CurrentNode);
 
public partial class TreeControl : UserControl {
  ..

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Okt. 2010 11:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dann habe ich leider auch keine andere Idee :-(

Wird das Control denn überhaupt eingebunden, d.h. liefert FindControl("TreeMain") überhaupt etwas? Hat das Control vielleicht irgendwelche Eigenschaften, die zwingend gesetzt werden müssen?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
11 Beiträge
Christoph Als Antwort am 5 Okt. 2010 11:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nee, das ist es ja eben, FindControl("treeMain") liefert immer "null", es sind keine Eigenschaften die zwingend gesetzt werden müssen, denn es ist ein Tree und der kann auch nur aus einer Wurzel bestehen.

Bin mit meinem Latain ja auch langdam am Ende.

Trotzdem DANKE

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Okt. 2010 11:12
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du könntest es noch mit LoadControl("PfadZurAscx") per CodeBehind versuchen. Dann habe ich aber wirklich keine Ideen mehr...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 5 Okt. 2010 11:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich gehe einfach mal davon aus das du einen Fehler in dem UserControl hast sonst würde VS das auch nicht bemängeln und demzufolge auch dort den Fehler suchen.

Wieleicht nutzt du in dem UserControl eine Assembly auf die SharePoint keinen Zugriff hat.

Ohne Rang
11 Beiträge
Christoph Als Antwort am 7 Okt. 2010 13:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also selbst wenn ich ein ganz neues UserControl erzeuge, welches nur das Standard Konstrukt hat und versuche dieses neue UserControl in einem anderen UserControl zu registrieren bekomme ich den selben Fehler, dass das Objekt nicht bekannt ist.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 7 Okt. 2010 13:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Woher kommt denn das andere Control, das Du oben erwähnst und das funktioniert? Auseinem anderen Projekt? Dann schau mal beim aktuellen Projekt in den Eigenschaften, daß es für Any CPU oder x64 kompiliert wird.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
11 Beiträge
Christoph Als Antwort am 7 Okt. 2010 14:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das Projekt enthält an die 10 UserControls 8 werden korrekt angebunden und 2 werden als unbekannt im VS2010 angemeckert. Alle gehören dem gleichen Projekt und dieses Projekt hat auch nur .dll-Datei bis auf die Standard DLL (wie z.B. die Microsoft.SharePoint.dll), also kann es auch kein Berechtigungsproblem sein. Ich suche weiter ;-)

Ohne Rang
11 Beiträge
Christoph Als Antwort am 7 Okt. 2010 15:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hab jetzt noch mal etwas rumprobiert. Habe nun eine neue Anwendungsseite erstellt und die UserControls dort eingebunden. Die Warnung erscheint wieder, doch sie werden auf der Seite korrekt dargestellt. Das einzige Problem was dann existiert ist, dass "TemplateContainer.FindControl("treeMain"); immer "null" liefert, also das Control nicht findet.