2011-01-28 1 views
1

Essayer de construire mon propre contrôle utilisateur:aide de base ASP.net avec contrôle utilisateur ASCX

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TabMenu.ascx.cs" Inherits="TabMenu" %> 

<asp:Panel runat="server" CssClass="tabWrapper"> 
     <div class="tab tabSelected"><a href="artworkHome.aspx">Home</a></div> 
     <div class="tab"><a href="#">Create New</a></div> 
     <div class="tab"><a href="#">Help!</a></div> 
     <div class="clear"></div> 
     <asp:Literal runat="server" ID="lol"></asp:Literal> 
</asp:Panel> 

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class TabMenu : System.Web.UI.UserControl 
{ 
    public string TabGroup { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (this.TabGroup == "Artwork") 
     { 
      lol.Text = "LOL!"; 
     } 

    } 
} 

Cela montre bien quand il est utilisé en tant que tel: « LOL »

<CrystalControls:TabMenu runat="server" TabGroup="Artwork" /> 

Sauf que ne montre pas. J'utilise probablement les propriétés incorrectement, etc, j'espère que c'est clair ce que j'essaye de faire?

+0

Où est situé le Littéral avec l'ID de 'lol'? Dans votre contrôle utilisateur ou dans la page .aspx, le contrôle a été placé? –

+0

@Dan Le littéral est dans le code ci-dessus, dans le fichier TabMenu.ascx. Même si j'enlève la condition, cela ne montre rien si je place son texte dans le codebehind du fichier ascx. –

Répondre

1

J'ai essayé votre exemple, mais tout fonctionne bien, je reçois LOL! au littéral. Si vous déboguez le code, et définissez un braekpoint sur le contrôle si Tabgroup == "ArtWork", vous pouvez vérifier la valeur de TabGroup, peut-être qu'il n'est pas encore défini?

+0

Même si je sors le conditionnel et juste le texte, il ne montre toujours pas :-( –

+0

DOH! Je suis stupide, merci :RÉ –

0

Votre problème est que Page_Load est pas un événement qui est automatiquement câblé pour les contrôles utilisateur, voir autoeventwireup, personnellement je déteste l'idée de souscrire à mes propres événements de toute façon, vous devez remplacer les méthodes virtuelles fournies si possible ..

Try this ...

protected override void OnLoad(EventArgs e) 
{  
    if (this.TabGroup == "Artwork")   
    {    
     lol.Text = "LOL!";   
    } 
    base.OnLoad(e); 
} 

ou même si cela est probable que l'utilisateur du contrôle pourrait changer le cours TabGroup la page Lifecyle ..

protected override void OnPreRender(EventArgs e) 
{  
    if (this.TabGroup == "Artwork")   
    {    
     lol.Text = "LOL!";   
    } 
    base.OnPreRender(e); 
} 
+0

J'ai mis le override dedans mais il ne rend toujours rien sur le contrôle –

+1

questioner a 'AutoEventWireup' mis à' vrai' dans sa directive '@ Control' (il vaut par défaut' true' de toute façon dans les pages et les contrôles C#), donc surcharger 'OnLoad()' n'est pas nécessaire - l'événement devrait se déclencher. –

+0

Je suppose qu'il faut, nous n'utilisons jamais autoeventwireup donc j'ai négligé cela ;-) –

1

Votre contrôle est codé correctement et fonctionne très bien. Je soupçonne la raison pour laquelle vous ne voyez pas le LOL! le texte est dû à quelque chose dans votre HTML ou CSS l'obscurcissant. Par exemple, vous pouvez avoir display:none sur l'un de vos onglets. Essayez de regarder la source de la page et de voir si le LOL! le texte est dedans - je parie que c'est.

Questions connexes