这是我担心没有人能够回答的问题之一,但要求没有害处!
我的ASP.NET页面上有很多UpdatePanels
。当用户在特定字段中输入值时,将相应地启用或禁用其他控件。到目前为止,我添加的每个小组都工作得很好,直到现在。
我有RadioButtonList
有三个选项 - 是,否和未知。如果用户选择“是”,则应启用UpdatePanel
中的文本框。实际发生的是它有时会更新......模式似乎是在页面加载时选择RadioButtonList
中的任何一个选项,如果您将选项更改为其他内容然后再返回,则不会触发UpdatePanel
。例如,如果选择了页面加载和“未知”,则将选择更改为“是”或“否”会正常启用和禁用文本框,因为您需要单击它们,但将选择更改为“未知”不会禁用文本框。就像我说的那样,当页面加载时,该模式适用于所选值。
更奇怪的是,如果我选择了不应该触发更新的值,然后更改完全不相关的控件中的值,这是另一个UpdatePanel
的触发器,当第二个面板更新时,第一个在那之前未能更新的第一个也是如此。尽管事实上我的所有updatepanels
都设置为条件更新模式。
我在下面显示了我的代码。希望有人能指出我正确的方向!
<tr class="grouprow">
<td>Non-Abdominal Surgery In Last 6 Months?</td>
<td><asp:RadioButtonList ID="rblRecentNonAbdominalSurgery" runat="server" RepeatDirection="Horizontal" SelectedValue='<%# Bind("AdmissionRecentNonAbdominalSurgery")%>'
CssClass="bottommargin" AutoPostBack="true" OnSelectedIndexChanged="rblRecentNonAbdominalSurgery_SelectedIndexChanged" ClientIDMode="AutoID" >
<asp:ListItem Text="Unknown" Value="" />
<asp:ListItem Text="Yes" Value="True" />
<asp:ListItem Text="No" Value="False" />
</asp:RadioButtonList></td>
</tr>
<tr class="grouprow">
<td>Non-Abdominal Surgery Description</td>
<td><asp:UpdatePanel ID="updRecentNonAbdominalSurgery" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="rblRecentNonAbdominalSurgery" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<asp:TextBox ID="txtRecentNonAbdominalSurgeryDescription" runat="server" Text='<%# Bind("AdmissionRecentNonAbdominalSurgeryDescription")%>' TextMode="MultiLine"
Rows="4" CssClass="multilinetextbox bottommargin" />
</ContentTemplate>
</asp:UpdatePanel></td>
</tr>
背后的代码:
Dim rblPreviousColicSurgery As RadioButtonList = fvPreviousColic.FindControl("rblPreviousColicSurgery")
If rblPreviousColicSurgery.SelectedItem.Text = "Yes" Then
txtPreviousColicSurgeryDescription.Enabled = True
Else
txtPreviousColicSurgeryDescription.Enabled = False
End If
答案 0 :(得分:0)
是的,我已经提出了这个问题,我很高兴自己第一次工作!导致该问题的原因是,当RadioButtonList
被指定为UpdatePanel
的异步触发器时,执行异步回发的JavaScript代码会在呈现页面时添加到RadioButtonList
中的每个项目,APART来自项目选择。因此,我们需要手动将代码添加到该项目中。
我已经创建了一个类并将此子添加到它:
Public Shared Sub AddJavaScriptToItem(ByVal rbl As RadioButtonList, ByVal selectedindex As Integer)
Dim clientid As String = rbl.ClientID
rbl.SelectedItem.Attributes.Add("onclick", "javascript:setTimeout('__doPostBack(\'" & clientid & "$" & selectedindex & "\',\'\')',0)")
End Sub
然后,我可以从我的网站上的任何位置轻松调用此sub,其中加载了RadioButtonList
AysncPostbackTrigger(例如,在FormView的DataBound事件中)。