2009-02-24 11 views
2

J'utilise un projet d'application Web ASP.Net. J'ai un contrôle d'utilisateur qui a un bouton d'asp.net dedans. Lorsque j'utilise ce contrôle utilisateur sur la page, le bouton n'apparaît pas, mais si je mets le bouton directement sur la page, les boutons apparaissent. Une idée du problème?Les contrôles ASP.Net apparaissent sur la page, mais pas dans un contrôle utilisateur sur cette page

En outre, à l'intérieur que le contrôle de l'utilisateur, je peux remplacer la méthode render et le test est passé à la méthode de rendu fonctionne, mais je ne comprends toujours pas un bouton

L'ensemble est enregistré dans le web.config

EDIT: Après le poste de dave, je trouve que tout mettre dans le fichier .ascx ne fonctionne pas, tout en remplaçant la méthode render que le contrôle de l'utilisateur fonctionne

la page

<%@ Page Title="Home" Language="C#" MasterPageFile="~/Master.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Site.Default" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <div> 
     <uc:SomeCustomControl ID="myControl" runat="server" /> 
     <asp:Button runat="server" Text="outControl" /> 
    </div> 
</asp:Content> 

le contrôle .ascx fichier

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="Site.Controls.TestControl" %> 
    <asp:Button runat="server" Text="InControl" /><!--cant see this button--> 
    <p>I can't see this</p><!--cant see this text--> 

le code derrière le fichier .ascx

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

namespace Site.Controls 
{ 
    public partial class TestControl : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 
     protected override void Render(HtmlTextWriter writer) 
     { 
      writer.Write("I can see this"); 
      base.Render(writer); 
     } 

    } 
}  

Et la source de la page

 I can see this 
     <input type="submit" name="ctl00$ContentPlaceHolder1$Button1" value="outControl" id="ctl00_ContentPlaceHolder1_Button1" /> 
+0

Pouvez-vous poster un exemple de code? – cjk

+0

modifier votre question et ajouter un code où vous ajoutez votre contrôle personnalisé, alors nous pouvons vous aider. – Canavar

+0

Puisque vous obtenez des choses dans votre rendu, je suppose que c'est juste un "exemple d'erreur" mais vous ne faites pas référence à votre contrôle dans le code de la page. –

Répondre

3

Si vous enregistrez le contrôle en haut de la page comme celle-

<%@ Register TagPrefix="uc" TagName="SomeCustomControl" Src="~/PathTo/TestControl.ascx" %> 

(point clé ici est la Src = partie « ... »)

alors le balisage et les contrôles en le TestControl.ascx sera visible et utilisable. si vous spécifiez seulement l'espace de noms du contrôle par exemple dans la directive web.config <pages> (ou dans le haut de la page) alors SEULEMENT le codebehind est utilisé, et tout balisage dans le code (.ascx) est ignoré

0

Y at-il un code dans le contrôle utilisateur affectant la la visibilité du bouton?

Le reste du contrôle de l'utilisateur apparaît-il ou contient-il uniquement le bouton? Si c'est seulement un bouton alors le contrôle entier de l'utilisateur peut ne pas être rendu correctement. Ajoutez du texte au contrôle utilisateur en guise de test pour vous assurer que c'est seulement le bouton qui ne fonctionne pas, pas tout le contrôle de l'utilisateur.

Vous pouvez également essayer d'activer le suivi pour la page. Le contrôle de l'utilisateur et le bouton doivent apparaître dans la liste de la hiérarchie de contrôle. Si ce n'est pas le cas, alors l'un ou les deux ne sont pas correctement rendus.

0

Cette page se trouve-t-elle dans une application standard par défaut? Y a-t-il une chance qu'un web.config ou machine.config ait une influence sur votre UserControl? Peut-être un HttpModule?

Outre la vérification d'une configuration de site Web "par défaut", vous pouvez également effectuer un débogage et vérifier les propriétés de vos objets. Vous pouvez écrire dans votre méthode de rendu. Peut-être regarder combien de contrôles sont dans le contrôle de l'utilisateur au moment du rendu. (peut-être que quelque chose enlève ou efface le conteneur des contrôles).

Questions connexes