如何解决ASP.NET:每个单选按钮在检查时都返回 false
我在获取嵌套转发器内单选按钮的正确值(检查为真/假)时遇到问题。
查看
<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>
代码隐藏
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
问题是'DirectCast(rptItem.FindControl("approvalRadioButton"),HtmlInpuTradioButton).Checked'总是返回false,即使它被选中。
我做了数小时的研究,但我不知道我在这里做错了什么
解决方法
我找到了一种解决方法来达到我想要的效果。
我在每一行添加了一个隐藏字段并赋予它以下属性:
Value='<%# DataBinder.Eval(Container.DataItem,"IsApproved").ToString %>'
然后我写了一些 javascript 来改变隐藏字段的值(真/假),如果一个单选按钮被按下。
在后面的代码中,我从每个重复项中检查隐藏字段的值,然后我得到了我选择的行!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。