views:

1076

answers:

3

I am currently having an issue with radio buttons and grouping. I have an asp radio button within a repeater control. I have the group name attribute set to "Customer". When the page loads, the radio buttons are not grouped. Instead of the id fields being set to the group name, it is setting the value fields of the radio buttons. I know that I have tried setting radio buttons up outside of a repeater control and have had the same issue. What is going on here?

aspx

<asp:Repeater ID="repCustomers" runat="server">
    <HeaderTemplate>
        <table class="tableDefault" cellpadding="0" cellspacing="0" border="0" style="width: 383px; border: 0px !important">
            <tr>
                <th>&nbsp;</th>
                <th>Cust. No.</th>
                <th>Cust. Name</th>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
            <tr>
                <td>
                    <asp:RadioButton ID="radCustomer" GroupName="Customer" runat="server" ValidationGroup="Customer" ToolTip='<%#Eval("CustomerNumber") %>' />
                </td>
                <td><%#Eval("CustomerNumber")%></td>
                <td><%#Eval("Name") %></td>
            </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

output html

<table class="tableDefault" cellpadding="0" cellspacing="0" border="0" style="width: 383px; border: 0px !important">
 <tr>
  <th>&nbsp;</th>
  <th>Cust. No.</th>
  <th>Cust. Name</th>
 </tr>

 <tr>
  <td>
   <span title="111111"><input id="ctl00_PrimaryContent_repCustomers_ctl01_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl01$Customer" value="radCustomer" /></span>
  </td>
  <td>111111</td>
  <td>Jeremy's Test</td>
 </tr>

 <tr>
  <td>
   <span title="222222"><input id="ctl00_PrimaryContent_repCustomers_ctl02_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl02$Customer" value="radCustomer" /></span>
  </td>
  <td>222222</td>
  <td>My Test</td>
 </tr>

 <tr>
  <td>
   <span title="333333"><input id="ctl00_PrimaryContent_repCustomers_ctl03_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl03$Customer" value="radCustomer" /></span>
  </td>
  <td>333333</td>
  <td>Jim Bob's BBQ</td>
 </tr>

 <tr>
  <td>
   <span title="444444"><input id="ctl00_PrimaryContent_repCustomers_ctl04_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl04$Customer" value="radCustomer" /></span>
  </td>
  <td>444444</td>
  <td>New Hope Hamburgers</td>
 </tr>

 <tr>
  <td>
   <span title="555555"><input id="ctl00_PrimaryContent_repCustomers_ctl05_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl05$Customer" value="radCustomer" /></span>
  </td>
  <td>555555</td>
  <td>Pied Piper Pizza</td>
 </tr>

 <tr>
  <td>
   <span title="666666"><input id="ctl00_PrimaryContent_repCustomers_ctl06_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl06$Customer" value="radCustomer" /></span>
  </td>
  <td>666666</td>
  <td>Sandy's Subs</td>
 </tr>

 <tr>
  <td>
   <span title="777777"><input id="ctl00_PrimaryContent_repCustomers_ctl07_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl07$Customer" value="radCustomer" /></span>
  </td>
  <td>777777</td>
  <td>Leonard's Lambchops</td>
 </tr>

 <tr>
  <td>
   <span title="888888"><input id="ctl00_PrimaryContent_repCustomers_ctl08_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl08$Customer" value="radCustomer" /></span>
  </td>
  <td>888888</td>
  <td>Dave's Diamond Deli</td>
 </tr>

 <tr>
  <td>
   <span title="999999"><input id="ctl00_PrimaryContent_repCustomers_ctl09_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl09$Customer" value="radCustomer" /></span>
  </td>
  <td>999999</td>
  <td>Ernie's Eatery</td>
 </tr>

</table>
A: 

I would start by adding a value on my radiobutton Value='<%#Eval("CustomerNumber") %>'.

Philippe Asselin
There is not a value attribute for the asp radio button control.
fizch
He probably meant the 'Text' property. ;)
Ian Kemp
That's a no go. I knew that it was just going to add a label to it, but I figured that I would try it anyways.
fizch
+4  A: 

Unfortunately, this is a well known issue with radio buttons within a repeater. One of your only options would be to create a custom server control derived from the RadioButton class and override how it renders.

EDIT: Here's a sample of what the derived class may look like:

public class MyRadioButton : RadioButton
{
    protected override void Render(HtmlTextWriter writer)
    {
        writer.Write("<input id=\"" + base.ClientID + "\" ");
        writer.Write("type=\"radio\" ");
        writer.Write("name=\"" + base.ID + "\" ");
        writer.Write("value=\"" + base.ID + "\" >");
        writer.Write(base.Text);
        writer.Write("</input>");
    }
}
CAbbott
Wow. This is a pretty big hole in functionality. Bleh.
Beska
This is based on the idea that you could have a radiobutton group within an item template of the repeater (multiple radio buttons on the same row). In that case you would want unique grouping based on the mangled id, but most of the time people want what the OP tried to do.
CAbbott
+3  A: 

I finally got around this by creating a plain radio button and setting the value using an server-side eval.

<input type="radio" name="radCustomer" value='<%#Eval("CustomerNumber") %>' />

Now when the application performs a postback, I check for the value of Request.Form("radCustomer"). This works flawlessly.

fizch