2009-10-27 6 views
1

Existe-t-il un moyen de contrôler comment .Net définit les propriétés Name et ID de mes contrôles? J'ai quelques boutons radio pour lesquels j'ai besoin que le nom soit le même. Toutefois, si je définis la propriété ID du contrôle de bouton radio, il définit le Name et le ID. Je ne vois aucun moyen de traiter les ID et Name séparément. Alors maintenant, tous les identifiants des boutons sont les mêmes. Si vous pensez que je devrais utiliser un RadioButtonList pour y parvenir, vous pouvez avoir raison, mais je n'ai pas trouvé un moyen d'inclure la structure de la table dans un RadioButtonList créé dynamiquement.Noms de contrôle C#

Merci

Répondre

2

Oui.

Déclarez une classe descendante à partir, disons, d'une zone de texte, qui remplace les propriétés UniqueID et ClientID. Ensuite, utilisez (dans cet exemple) MyControls.Textbox au lieu de la zone de texte intégrée.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 


    namespace MyControls 
    { 
     public class Textbox : System.Web.UI.WebControls.TextBox 
     { 
      public override string ClientID 
      { 
       get 
       { 
        return ID; 
       } 

      } 

      public override string UniqueID 
      { 
       get 
       { 
        return ID; 
       } 
      } 

     } 

     public class Button : System.Web.UI.WebControls.Button 
     { 

      public override string ClientID 
      { 
       get 
       { 
        return ID; 
       } 

      } 

      public override string UniqueID 
      { 
       get 
       { 
        return ID; 
       } 
      } 
     } 
    } 

Notez que vous devrez enregistrer vos contrôles web.config:

<pages> 
    <controls> 
    <add tagPrefix="mycontrols" namespace="MyControls" assembly="MyAssembly" /> 
    </controls> 
</pages> 

Ensuite, vous pouvez les référencer dans votre balisage:

<mycontrols:TextBox id="myID" runat="server"/> 
+0

Est-ce que vous devez créer un Séparer le projet pour créer cet assembly, ou pouvez-vous le faire à l'intérieur d'un projet d'application Web déjà existant dans Visual Studio? – dannyrosalex

+0

Non, mettez-le où vous voulez. Tant que la page peut voir la classe de contrôle (les références, l'enregistrement, etc. sont correctement définies), vous êtes bon. –

0

Si vous omettez l'attribut runat="server" de la définition du contrôle, son nom et l'ID sont gratuits pour vous de définir. Cependant, que ce soit ou non une option dépend de votre situation.

Dans l'autre cas, il n'existe aucun moyen de contrôler réellement les propriétés Name et ID pour ces contrôles. C'est-à-dire, pas jusqu'à ASP.NET 4.0 (regarder here pour plus d'informations) est libéré.

0

J'ai résolu ce problème dans le passé en créant un nouveau contrôle qui hérite de RadioButton mais ajoute une nouvelle propriété GroupName qui est utilisée pour rendre le nom du contrôle. Malheureusement, je n'ai pas le code à portée de main, mais un rapide google est venu avec quelque chose similar on codeproject.

1

Ne fonctionne pas comme dans .net. Ils doivent être nommés de façon unique car c'est ainsi qu'ils corrèlent le bouton radio à viewstate. Je voudrais demander pourquoi vous avez besoin qu'ils soient le même nom? Si c'est parce que vous voulez que l'utilisateur puisse seulement sélectionner 1 élément sur x, alors vous voulez utiliser la propriété GroupName.