2010-02-19 5 views
0

Je suis nouveau à l'écriture des contrôles serveur ASP.NET personnalisé, et je rencontre la question suivante:balises côté ASP.NET serveur émettant de contrôle du serveur

J'ai un contrôle qui hérite de System.Web.UI.HtmlControls.HtmlGenericControl. Je remplace la méthode Render du contrôle, utilisez le HtmlTextWriter pour émettre du code HTML personnalisé (essentiellement une balise TD avec certains attributs personnalisés), puis appelez la méthode Render de la classe de cas.

Utilisation de la commande:

<dc:Header id="header1" runat="Server" DataColumn="MemberNumber" Width="30%">Member Number</dc:Header > 

Le problème est que quand je considère mon rendu HTML, la balise de serveur est émise au client ainsi (à droite après la balise TD):

<dc:Header id="ctl00_ContentPlaceHolder_testData1_testData1_header1">Member Number</dc:Header> 

Comment puis-je empêcher cela?

+0

Cela ne devrait pas arriver - pouvez-vous poster votre méthode de rendu? – Ray

Répondre

2

La méthode de rendu de base émet les variables en RenderBeginTag et RenderEndTag(), ne l'appelez pas si vous faites votre propre rendu. Je ne voudrais pas non plus hériter de HtmlGenericControl si vous pouvez l'aider, juste hériter de WebControl ou Control même si vous n'avez besoin d'aucun des attributs WebControl.

La méthode normale Render() fait ceci:

protected override void Render(HtmlTextWriter writer) 
{ 
    RenderBeginTag(writer); 
    RenderContents(writer); 
    RenderEndTag(writer); 
} 

Tant que vous appelez ce que vous avez besoin, probablement RenderContents() dans votre cas, pas besoin d'appeler base.Render(writer).

Si vous souhaitez toujours remplacer HtmlGenericControl, veillez à définir TagName property.

+0

Fonctionne parfaitement, merci pour l'explication. – staterium

Questions connexes