5 votes

Comment puis-je ajouter une propriété personnalisée aux éléments d'un RadioButtonList?

Comment puis-je ajouter une attribut de données Html5 lié aux éléments générés avec RadioButtonList lié ?

Mon code ressemble à ceci :

var List questions = GetQuestions();
QuestionList.DataSource = questions;
QuestionList.DataBind();

Il est lié à une structure de classe qui ressemble à ceci :

public class Question
{
    int QuestionId;
    string Question;
    List Answers;
}

public class Answers
{
    int AnswerId;
    string Answer;
    bool SomeFlag;
}

Je dois ajouter SomeFlag à l'interface utilisateur pour que jQuery l'utilise, de sorte que chaque élément généré ressemble à ceci :

Y a-t-il un moyen d'ajouter un attribut de données html aux objets input générés à partir de RadioButtonList lié ?

3voto

Adil Points 80031

Vous pouvez utiliser les attributs ListItem pour ajouter des attributs personnalisés aux éléments de la liste de boutons radio. Vous pouvez vérifier comment votre HTML est généré pour la liste de boutons radio et faire en sorte que jQuery récupère l'attribut de données requis pour vous.

Côté serveur

ListItem li1 = new ListItem();
ListItem li2 = new ListItem();
li1.Attributes.Add("data-flag", "true");
li2.Attributes.Add("data-flag", "true");
RadioButtonList1.Items.Add(li1);
RadioButtonList1.Items.Add(li2);

HTML généré pour la liste de boutons radio

Accéder à jQuery

$(':radio[id*=RadioButtonList1]').click(function(){
      alert($(this).closest('span').data('flag'));
})

1voto

Ann L. Points 7456

Votre meilleure option si vous avez besoin de générer les attributs côté serveur serait de sous-classer le contrôle RadioButtonList et de remplacer la méthode Render.

Si vous avez une copie de Reflector ou un produit similaire capable de montrer du code décompilé, cela serait très utile pour déterminer exactement où l'élément ListItem est rendu en tant que bouton radio.

1voto

Felipe Oriani Points 11973

Vous pouvez définir un attribut dans l'événement ItemDataBound du Repeater, essayez quelque chose comme suit :

protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    // s'il s'agit d'un élément (pas en-tête ou pied de page)
    if (e.Item.ItemType == ListItemType.Item)
    {
        // obtenez votre radioButtonList
        RadioButtonList optionsList = (RadioButtonList)e.Item.FindControl("rblOptionsList");

        // boucle dans les options du RadioButtonList
        foreach (ListItem option in optionsList.Items)
        {
            // ajouter un attribut personnalisé
            option.Attributes["data-flag"] = "true";
        }
    }
}

Et n'oubliez pas de définir les ID et les événements pour vos contrôles

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X