kaegmatic
kaegmatic

Reputation: 13

ASP.NET: every radiobutton returns false while it's checked

I got a problem with getting the correct value (checked true/false) of my radiobuttons inside nested repeaters.

VIEW

    <table id="HoursTable">
    <asp:Repeater ID="hoursRepeater" runat="server">        
        <HeaderTemplate>
            <thead>
                <tr>
                    <th>V</th>
                    <th>some text</th>
                    <th>some text</th>
                    <th>some text</th>
                </tr>
            </thead>
        </HeaderTemplate>
        <ItemTemplate>                
            <tr runat="server" ID="itemTemplateRow">
                <td runat="server" visible="false">
                    <asp:HiddenField runat="server" ID="HoursIDHiddenField" Value='<%# Eval("HoursID") %>' />
                </td>
                <td class="centerAlign">
                    <input runat="server" type="radio" class="radiobuttonMain" ID="aprrovalRadioButton" Checked='<%# DataBinder.Eval(Container.DataItem, "IsApproved") %>' />
                </td>
                <td>some text</td>
                <td>some text</td>
            </tr>
            <asp:Repeater runat="server" ID="temporaryHoursRepeater" OnItemDataBound="temporaryHoursRepeater_ItemDataBound">                    
                <ItemTemplate>
                    <tr runat="server" ID="itemTemplateRow">
                        <td runat="server" visible="false">
                            <asp:HiddenField runat="server" ID="HoursIDHiddenField" Value='<%# Eval("HoursID") %>' />
                        </td>
                        <input runat="server" type="radio" class="radiobuttonTemp" ID="aprrovalRadioButton" Checked='<%# DataBinder.Eval(Container.DataItem, "IsApproved") %>'/>
                        <td>some text</td>
                        <td>some text</td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>            
    </asp:Repeater>
</table>
<tr>
    <td>
        <asp:Button runat="server" ID="saveButton" CssClass="saveButton" Text="Save" OnClick="saveButton_Click" />
    </td> 
</tr>

CODE BEHIND

Protected Sub saveButton_Click(sender As Object, e As EventArgs)
    For Each rptItem As RepeaterItem In urenRepeater.Items
        Dim currentHoursGroup As New List(Of Hour)
        currentHoursGroup.Add(DomainController.getInstance.getHour(CType(rptItem.FindControl("HoursIDHiddenField"), HiddenField).Value))
        For Each rptItemC As RepeaterItem In CType(rptItem.FindControl("temporaryUrenRepeater"), Repeater).Items
            currentHoursGroup.Add(DomainController.getInstance.getHour(CType(rptItemC.FindControl("HoursIDHiddenField"), HiddenField).Value))
        Next

        If DirectCast(rptItem.FindControl("approvalRadioButton"), HtmlInputRadioButton).Checked Then
            currentHoursGroup.Remove(DomainController.getInstance.getHour(CType(rptItem.FindControl("HoursIDHiddenField"), HiddenField).Value))
            DomainController.getInstance.getHour(CType(rptItem.FindControl("HoursIDHiddenField"), HiddenField).Value).deleteAllTemporaryHours()
        Else
            For Each rptItemT As RepeaterItem In CType(rptItem.FindControl("temporaryUrenRepeater"), Repeater).Items
                If DirectCast(rptItemT.FindControl("approvalRadioButton"), HtmlInputRadioButton).Checked Then
                    currentHoursGroup.Remove(DomainController.getInstance.getHour(CType(rptItemT.FindControl("HoursIDHiddenField"), HiddenField).Value))
                    'do sth
                End If
            Next
        End If
        For Each u As Hour In currentHoursGroup
            'do sth
        Next
    Next
End Sub

The problem is that 'DirectCast(rptItem.FindControl("approvalRadioButton"), HtmlInputRadioButton).Checked' always returns false, even it is checked.

I did hours of research, but I can't figure out what I'm doing wrong here

Upvotes: 0

Views: 158

Answers (1)

kaegmatic
kaegmatic

Reputation: 13

I found a workaround to reach what I want.

I added in each row a hiddenfield and gave it the following attribute:

Value='<%# DataBinder.Eval(Container.DataItem, "IsApproved").ToString %>'

Then I wrote some javascript to change the value (true/false) of the hiddenfield if a radiobutton was pressed.

In the code behind I check from every repeateritem the value of the hiddenfield and I got my selected rows!

Upvotes: 0

Related Questions