How can I add a bound Html5 data- attribute to the items generated with a bound RadioButtonList
?
My code looks like this:
<asp:Repeater Id="QuestionList" ...>
<ItemTemplate>
<asp:RadioButtonList DataSource='<%# Eval("Answers") %>'
SelectedValue='<%# Eval("SelectedAnswerId") %>'
DataTextField="Answer"
DataValueField="AnswerId"
Tag='<%# Eval("QuestionId") %>' />
</ItemTemplate>
</asp:Repeater>
var List<Question> questions = GetQuestions();
QuestionList.DataSource = questions;
QuestionList.DataBind();
It is bound to a class structure that looks like this:
public class Question
{
int QuestionId;
string Question;
List<Answer> Answers;
}
public class Answers
{
int AnswerId;
string Answer;
bool SomeFlag;
}
I need to add SomeFlag
to the UI for jQuery to use, so the end result is that each item generated should look like this:
<input type="radio" data-flag="true" ... />
Is there a way to add a html data- attribute to the input objects generated from a bound RadioButtonList
?
You can use ListItem attributes to add custom attributes to the items in the radio button list. You can check how your html is generated for radio button list and make jquery to get the required data attribute for you.
On server side
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);
Generated html for radio button list
<table id="RadioButtonList1" border="0">
<tr>
<td><span data-flag="true"><input id="RadioButtonList1_0" type="radio" name="RadioButtonList1" value="" /></span></td>
</tr><tr>
<td><span data-flag="true"><input id="RadioButtonList1_1" type="radio" name="RadioButtonList1" value="" /></span></td>
</tr>
</table>
Accessing in jquery
$(':radio[id*=RadioButtonList1]').click(function(){
alert($(this).closest('span').data('flag'));
})
You can set an Attribute in the ItemDataBound event of Repeater, try something like:
protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// if it is an item (not header or footer)
if (e.Item.ItemType == ListItemType.Item)
{
// get your radioButtonList
RadioButtonList optionsList = (RadioButtonList)e.Item.FindControl("rblOptionsList");
// loop in options of the RadioButtonList
foreach (ListItem option in optionsList.Items)
{
// add a custom attribute
option.Attributes["data-flag"] = "true";
}
}
}
And remember to set the IDs and Events for your controls
<asp:Repeater Id="QuestionList" ItemDataBound="QuestionList_ItemDataBound" ...>
<ItemTemplate>
<asp:RadioButtonList ID="rblOptionsList" DataSource='<%# Eval("Answers") %>'
SelectedValue='<%# Eval("SelectedAnswerId") %>'
DataTextField="Answer"
DataValueField="AnswerId"
Tag='<%# Eval("QuestionId") %>' />
</ItemTemplate>
</asp:Repeater>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With