2009-06-15 8 views
0

J'ai un usercontrol que j'essaie d'utiliser dans un projet.asp.net usercontrol impair comportement

Si je le fais comme ça (référence le plan du site dans le contrôle)

<%@ Register TagPrefix="OS" Namespace="OS_Layouts" Assembly="OSControlLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0831306e55dc1c27" %> 

<html><body> 
<OS:OSmenu runat="server" ID="men1" SiteMap="siteMapDataSource1" /> 
    <asp:SiteMapDataSource ShowStartingNode="false" SiteMapProvider="CombinedNavSiteMapProvider" 
    ID="siteMapDataSource1" runat="server" /> 
</body </html> 

je reçois une erreur bizarre.

Parser Message d'erreur: Impossible de créer un objet de type « System.Web.UI.WebControls.SiteMapDataSource » de sa représentation de chaîne « siteMapDataSource1 » pour la propriété « SiteMap ».

Si je fais cela, cela fonctionne très bien. (Ajoutez le plan du site dans le code pendant pageload)

<%@ Register TagPrefix="OS" Namespace="OS_Layouts" Assembly="OSControlLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0831306e55dc1c27" %> 
<script runat=server> 

protected void Page_Load(object sender, EventArgs e) 
    { 
    men1.SiteMap = siteMapDataSource1;   
    } 
</script> 
<html><body> 
<OS:OSmenu runat="server" ID="men1" /> 
    <asp:SiteMapDataSource ShowStartingNode="false" siteMapProvider="CombinedNavSiteMapProvider" ID="siteMapDataSource1" runat="server" /> 
</body> </html> 

La seule chose « intelligent » que je fais utilise « aspnet_compiler » et « aspnet_merge » pour créer un fichier .dll contenant mes usercontrols en une seule dll je peux utiliser dans autres projets.

Ai-je mal compris, ou mal configuré quelque chose?

Merci EDIT: quelques informations supplémentaires.

Donc, mon aspx.cs ressemble à ceci Je reçois toujours "Fail!"

using System; 
using System.Web.UI.WebControls; 

public partial class OSmenu : System.Web.UI.UserControl 
{ 

    public String SiteMapID { get; set; } 


    protected void Page_Load(object sender, EventArgs e) 
    { 

    if (SiteMapID == "") return; 
     SiteMapDataSource foo = Page.FindControl(SiteMapID) as SiteMapDataSource; 
     if (foo == null) 
     { 
      Response.Write("</br> fail!"); 
     } 
     else 
     { 
      Response.Write("/<br> ok!" + foo.UniqueID); 
     } 
    } 



} 

Tout cela est un peu compliqué par le fait la page d'accueil pour le contrôle est un masterpage sharepoint, et je ne peux pas obtenir le débogage de travailler pour le contrôle, je peux le masterpage lui-même!

Répondre

1

Essayez dans votre userconrol:

SiteMapDataSource ds = this.Page.FindControl(this.SiteMap) as SiteMapDataSource; 
Questions connexes